7

我有两张桌子:

要求

  • ID(整数)PK
  • 客户 ID(整数)
  • 工作编号(整数)

评论

  • ID(整数)PK
  • Job_ID (int)
  • 注释(varchar)

这些表没有外键,也不可能添加任何外键。我正在尝试将它们映射到 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。

任何帮助表示赞赏。

4

1 回答 1

8

这是不可能的。使用实体框架,Comment.Requirement导航属性所引用的实体通常由 中的(主)键属性标识Requirement,即ID。没有映射选项来定义目标属性是键属性以外的任何东西——比如JobNumber或另一个非键属性。

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

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

我不知道这是否会产生其他不希望的副作用。JobNumber(如果不是唯一的,它肯定不起作用,因为EF 不允许将多个具有相同键的实体附加到上下文,并且更新/删除等不会在数据库中找到正确的记录。 ) 这对我来说是错误的和骇人听闻的。老实说,我什至不会尝试,接受这样一个事实,即您在数据库中没有真正的外键关系,忘记导航属性Requirement.Comments并在 LINQ 中Comment.Requirement使用 manualjoin来关联我需要的表数据/实体在给定的情况下。

于 2012-11-21T20:35:59.350 回答