我有两个表:
要求
评论
这些表没有外键,也不可能添加任何外键。我正在尝试在 EF 中映射它们。我为每个类都有类,并且我试图用流畅的代码定义关系,以将 Comment.Job_ID 映射到 Requirement.JobNumber。一个需求可以有很多注释。 Requirement 有一个 Comments 列表,Comment 有一个 Requirement 属性。
我有这个映射设置:
modelBuilder.Entity<Comment>().HasRequired(c => c.Requirement)
.WithMany(s => s.Comments)
.HasForeignKey(f => f.Job_ID);
我一直在试图让 Comment.Job_ID 映射到 Requirement.JobNumber。
任何帮助表示赞赏。
最佳答案
这是不可能的。使用 Entity Framework Comment.Requirement
的实体所指的导航属性通常由 Requirement
中的(主)键属性标识,即通过 ID
.没有映射选项来定义目标属性是关键属性之外的任何其他属性 - 例如 JobNumber
或其他非关键属性。
我只能想象你可以“伪造”模型中的主键属性为 JobNumber
而不是 ID
(假设 JobNumber
在 Requirement
表中是唯一的):
modelBuilder.Entity<Requirement>().HasKey(r => r.JobNumber);
我不知道这是否会产生其他不希望的副作用。 (如果
JobNumber
不是唯一的,它肯定不起作用,因为 EF 不允许将具有相同键的多个实体附加到上下文和更新/删除等不会在中找到正确的记录数据库。)对我来说感觉不对劲。老实说,我什至不会尝试,因为您在数据库中没有真正的外键关系,忘记导航属性 Requirement.Comments
和 Comment.Requirement
和使用手册 join
s 在 LINQ 中关联表数据/实体,因为我在给定情况下需要它们。
关于entity-framework - 没有外键的 Entity Framework 代码优先映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498795/