ReferentialConstraint中的依赖属性映射到存储生成的列。 TPT继承中的列'Id'

时间:2016-10-10 19:25:40

标签: c# entity-framework inheritance table-per-type

我首先使用EF代码,我有以下实体:

enter image description here

我正在使用TPT方法进行继承,创建一对一或零关系,编写以下代码:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Order>()
                .HasOptional(x => x.ProductionInstruction)
                .WithRequired(x => x.Order);
}

我编写以下代码来保存ProductionInstruction

var pi = new ProductionInstruction();
/* set pi properties */
ctx.ProductionInstructions.Add(pi);
ctx.SaveChanges();

ctx.SaveChanges()运行时出现以下错误:

  

ReferentialConstraint中的依赖属性映射到存储生成的列。专栏:'Id'。

有没有办法在我的两个实体之间实现1..0-1,没有上述错误?

1 个答案:

答案 0 :(得分:3)

在实体框架中,通过为从属主密钥提供主要的外键来实现与所需主体的一对一映射。从属服务器从主体复制其主键。

在您的情况下,EF希望ProductionInstruction.Id成为Order.Id的外键,并且应从其所属的Order复制其值。但是,由于继承,ProductionInstruction.Id是一个标识列( store-generated ),因此无法在代码中设置。

您必须删除继承,因此ProductionInstruction.Id可以映射为不存储生成,或者将映射更改为双方可选。后者将为ProductionInstruction提供Order单独的外键。