gpt4 book ai didi

inheritance - Entity Framework 4.1 派生类中没有其他数据库字段的 TPH

转载 作者:行者123 更新时间:2023-12-04 06:18:20 24 4
gpt4 key购买 nike

这是我的(简化的)问题。
类(class):

public class RetailExposure
{
public int RetailExposureId { get; set; }
public int RetailModelId { get; set; }
}


public class PocRetailExposure : RetailExposure
{
[NotMapped]
public string IncidentScore { get; set; }
}

和我的 OnModelCreating 代码:
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<RetailExposure>().ToTable("dbo.RetailExposure");
modelBuilder.Entity<RetailExposure>().Map<PocRetailExposure>(p => p.Requires("RetailModelId").HasValue(1).IsRequired());
}

但是,当我添加新的曝光记录时:
        context.RetailExposures.Add(new RetailExposure { RetailModelId = 1 });
context.SaveChanges();

我收到以下错误:
System.Data.MappingException: 
(6,10) : error 3032: Problem in mapping fragments starting at line 6:Condition
member 'RetailExposure.RetailModelId' with a condition other than 'IsNull=False'
is mapped. Either remove the condition on RetailExposure.RetailModelId or remove
it from the mapping.

我想要做的是有一个基类“RetailExposure”,其派生类由 RetailModelId 字段确定。派生类不包含数据库中的任何属性。我似乎已经想出了如何配置 EF 以使用 RetailModelId 作为鉴别器,但在保存更改时我仍然收到此错误。

关于我需要如何配置上下文以使其工作的任何想法?还是我试图做一些 EF 目前不支持的事情?

我确实意识到我可以告诉 EF 完全忽略派生类,但这并不是我想要的。

最佳答案

鉴别器不得映射为实体中的属性 - 不支持。鉴别器只是数据库中的一列,它映射到实际实体的子类型。如果要将鉴别器作为属性,则无法映射 TPH。此外,如果您的父实体不是抽象的,它也必须为鉴别器定义值。

就像是:

public class RetailExposure
{
public int RetailExposureId { get; set; }
}

public class PocRetailExposure : RetailExposure
{
[NotMapped]
public string IncidentScore { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<RetailExposure>().ToTable("dbo.RetailExposure");
modelBuilder.Entity<RetailExposure>()
.Map<RetailExposure>(p => p.Requires("RetailModelId").HasValue(0))
.Map<PocRetailExposure>(p => p.Requires("RetailModelId").HasValue(1));
}

关于inheritance - Entity Framework 4.1 派生类中没有其他数据库字段的 TPH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com