实体框架代码首先没有外键映射

时间:2012-11-21 17:29:17

标签: entity-framework mapping code-first

我有两张桌子:

要求

  • ID(int)PK
  • ClientID(int)
  • JobNumber(int)

注释

  • ID(int)PK
  • Job_ID(int)
  • 评论(varchar)

这些表没有外键,也没有添加任何外键的可能性。我正试图在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。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:7)

这是不可能的。对于实体框架,Comment.Requirement导航属性所引用的实体通常由Requirement中的(主)键属性标识,即由ID标识。没有映射选项来定义目标属性不是键属性 - 如JobNumber或其他非键属性。

我只能想象你可以“伪造”模型中的主键属性为JobNumber而不是ID(假设JobNumberRequirement中是唯一的} table):

modelBuilder.Entity<Requirement>().HasKey(r => r.JobNumber);

我不知道是否会有其他不受欢迎的副作用。 (当JobNumber 唯一时,它确实不起作用,因为EF不允许有多个具有相同键的实体附加到上下文并更新/删除等等on会在数据库中找不到正确的记录。)对我来说感觉不对劲和hacky。老实说,我甚至不会尝试这样做,因为你在数据库中没有真正的外键关系,忘记导航属性Requirement.CommentsComment.Requirement并使用手册{{1}在LINQ中,在给定的情况下我需要它们来关联表数据/实体。