[英]Entity Framework multiple mapping to same table DB first
我有一个来自DB模型的实体框架的问题。
我的问题是由于我的一个模型对一个表有多个引用。
public partial class Customer
{
public int Id { get; set; }
public Nullable<int> PrimaryEngId { get; set; }
public Nullable<int> AssignedDevloperId { get; set; }
public virtual Engineer Engineer { get; set; }
public virtual Engineer Engineer1 { get; set; }
}
在我的模型中,列分别被映射,但是当同事从同一数据库构建模型时,两者是相反的。
我认为问题是第一个映射到的是primaryEngId
,Db约束叫做FK_Customer_Engineer
。
随后添加了分配的开发人员ID,DB约束称为FK_Customer_Devloper
因此按字母顺序Developer
Engineer
在Engineer
和实体框架之前就已经反过来了。
我的代码在相当多的地方引用了Engineer
,现在它们无法工作
这有什么办法吗?
非常感谢
伊恩
您必须在外键上为这两个导航属性添加缺少的ForeignKey属性:
[ForeignKey("Primary")]
public int? PrimaryEngId { get; set; }
[ForeignKey("Assigned")]
public int? AssignedDevloperId { get; set; }
public virtual Engineer Primary { get; set; }
public virtual Engineer Assigned { get; set; }
注意 :也不要使用EF的导航属性的通用名称。 简而言之,EF给你的最好的东西之一就是你可以说:
@myCustomer.Assigned.Name
在视图中等等,你完全搞砸了像Engineer和Engineer1这样的名字。
注意2 :保持Nullable<int>
代码生成。 int?
更具可读性。
注3 :使用VS重构将属性Engineer
和Engineer1
重命名为它们应该是什么( PrimaryEngineer
和AssignedEningeer
等)。 之后,将ForeignKey
属性添加到模型中。 那应该够了。 但是,您正在进行的任何未来更改都必须在代码中完成,而不是在db中完成。
如果在另一方面,你不断地新生从数据库实体和上下文代码,请确保您的所有外键具有有意义的名称,如EF将使用它们生成的名字。(即不命名Engineer1
出蓝色)重新命名的外国用于反映逻辑关系的键。 也就是说,你很可能在db中有以下外键:
FK_Customer_Engineer
FK_Customer_Engineer1
您需要将它们重命名为
FK_Customer_PrimaryEngineer
FK_Customer_AssignedEngineer
更新 :您可以使用不同的列名和属性名称,如下所示:
[Column("PrimaryEngId")]
[ForeignKey("Primary")]
public int? PrimaryID { get; set; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.