entity-framework-6 - 如何在实体框架 6 中的多个访问器属性上创建复合主键
问题描述
我正在尝试基于 Entity Framework 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; }
}
目前,我得到了自动生成的数据库表,其中包含以下列: Id | ManufacturingBundle_Id | Part_Id | Process_Id
其中 Id 是主键。我想摆脱 Id 列并根据 ManufacturingBundle_Id、Part_Id 和 Process_Id 创建一个复合主键
所以我尝试重载 OnModelCreating 方法,但这似乎不适用于类型化对象,调试器说属性需要是整数。
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; }
}
然后它应该让您在模型创建时创建复合键,如上所述。
推荐阅读
- javascript - Ramda or ES6 - Return the value of an Object Property, after filtering an Array of Objects
- java - MultiMC 加载完成后崩溃 7/7
- syntax - Fortran77 代码的问题 - 多行文本
- python-3.x - 来自文件的 Python 3 阅读列表 - 附加方括号和引号
- python - 如何清理列表
- javascript - 删除重复的元素
- safari - MacOS Catalina 上的端口转发以解决 DNS 问题
- java - 如何使用 gradle 运行主文件?
- c++ - 在 c 或 c++ 中,循环可以同时包含“do”和“while”部分吗?
- javascript - 未捕获的 SyntaxError:使用 processing.js 打开处理时出现意外标识符