繁体   English   中英

实体框架首先多个映射到同一个表DB

[英]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 EngineerEngineer和实体框架之前就已经反过来了。

我的代码在相当多的地方引用了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重构将属性EngineerEngineer1重命名为它们应该是什么( PrimaryEngineerAssignedEningeer等)。 之后,将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM