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

Mat*_*att 6 mapping entity-framework code-first

我有两张桌子:

需求

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

评论

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

这些表没有外键,也没有添加任何外键的可能性.我正试图在EF中映射它们.我有每个类,我试图用流畅的代码定义关系,将Comment.Job_ID映射到Requirement.JobNumber.要求可以有很多评论.要求具有注释列表,而注释具有Requirement属性.

我有这个映射设置:

modelBuilder.Entity<Comment>().HasRequired(c => c.Requirement)
                    .WithMany(s => s.Comments)
                    .HasForeignKey(f => f.Job_ID);
Run Code Online (Sandbox Code Playgroud)

我试图让Comment.Job_ID映射到Requirement.JobNumber.

任何帮助赞赏.

Sla*_*uma 7

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

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

modelBuilder.Entity<Requirement>().HasKey(r => r.JobNumber);
Run Code Online (Sandbox Code Playgroud)

我不知道是否会有其他不受欢迎的副作用.(为了确保它不会,如果工作JobNumber不是独一无二的,因为EF不允许有与连接到一个框架,并且更新/删除相同的密钥多个实体等不会在数据库中找到正确的记录. )对我来说,这感觉是错误的和黑客的.老实说,我甚至不会尝试这样做,因为你在数据库中没有真正的外键关系,忘记导航属性Requirement.Comments,Comment.Requirementjoin在LINQ中使用手册来关联表数据/实体,因为我需要它们在特定情况下.