我首先使用EF代码,我有以下实体:
我正在使用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,没有上述错误?
答案 0 :(得分:3)
在实体框架中,通过为从属主密钥提供主要的外键来实现与所需主体的一对一映射。从属服务器从主体复制其主键。
在您的情况下,EF希望ProductionInstruction.Id
成为Order.Id
的外键,并且应从其所属的Order
复制其值。但是,由于继承,ProductionInstruction.Id
是一个标识列( store-generated ),因此无法在代码中设置。
您必须删除继承,因此ProductionInstruction.Id
可以映射为不存储生成,或者将映射更改为双方可选。后者将为ProductionInstruction
提供Order
单独的外键。