我有两张桌子:
要求
注释
这些表没有外键,也没有添加任何外键的可能性。我正试图在EF中映射它们。我有每个类,我试图用流畅的代码定义关系,将Comment.Job_ID映射到Requirement.JobNumber。要求可以有很多评论。要求有一个评论列表,而评论有一个要求属性。
我有这种映射设置:
modelBuilder.Entity<Comment>().HasRequired(c => c.Requirement)
.WithMany(s => s.Comments)
.HasForeignKey(f => f.Job_ID);
我试图将Comment.Job_ID映射到Requirement.JobNumber。
任何帮助表示感谢。
答案 0 :(得分:7)
这是不可能的。对于实体框架,Comment.Requirement
导航属性所引用的实体通常由Requirement
中的(主)键属性标识,即由ID
标识。没有映射选项来定义目标属性不是键属性 - 如JobNumber
或其他非键属性。
我只能想象你可以“伪造”模型中的主键属性为JobNumber
而不是ID
(假设JobNumber
在Requirement
中是唯一的} table):
modelBuilder.Entity<Requirement>().HasKey(r => r.JobNumber);
我不知道是否会有其他不受欢迎的副作用。 (当JobNumber
唯一时,它确实不起作用,因为EF不允许有多个具有相同键的实体附加到上下文并更新/删除等等on会在数据库中找不到正确的记录。)对我来说感觉不对劲和hacky。老实说,我甚至不会尝试这样做,因为你在数据库中没有真正的外键关系,忘记导航属性Requirement.Comments
和Comment.Requirement
并使用手册{{1}在LINQ中,在给定的情况下我需要它们来关联表数据/实体。