如何在实体框架 6 中的多个访问器属性上创建复合主键



我正在尝试根据实体框架 6 中的三个导航属性创建一个组合键:ManufacturingBundle_Id、Part_Id 和 Process_Id

这是我目前使用的 PartProcess 类,其中 Id 是主键:

public class PartProcess
{
public int Id { get; set; }
public virtual ManufacturingBundle ManufacturingBundle { get; set; }
public virtual Part Part { get; set; }
public virtual Process Process { get; set; }
}

目前,我得到了自动生成的数据库表,其中包含以下列: 编号 |ManufacturingBundle_Id |Part_Id |Process_Id

其中 Id 是主键。我想摆脱 Id 列并根据 ManufacturingBundle_Id、Part_Id 和 Process_Id 制作复合主键

所以我尝试重载 OnModelCreate 方法,但这似乎不适用于类型化对象,调试器说属性需要是整数。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// create a composite primary key for PartProcess https://www.learnentityframeworkcore.com/configuration/fluent-api/haskey-method
modelBuilder.Entity<PartProcess>()
.HasKey(o => new { o.ManufacturingBundle, o.Part, o.Process });
base.OnModelCreating(modelBuilder);
}

由于我使用导航属性,并且ManufacturingBundle_Id、Part_Id 和Process_Id属性是由实体框架自动生成的,因此必须如何声明此复合主键?

感谢您的帮助,

艾菲

例如,假设 ManufacturingBundle 有一个 ManufacturingBundleId 字段,您需要按如下方式配置模型:

public class PartProcess
{
public int ManufacturingBundleId { get; set; }
public virtual ManufacturingBundle ManufacturingBundle { get; set; }
public int PartId { get; set; }
public virtual Part Part { get; set; }
public int ProcessId { get; set; }
public virtual Process Process { get; set; }
}

然后,它应该允许您在创建模型时创建组合键,如上所述。

最新更新