gpt4 book ai didi

c# - Entity Framework 首先多次映射到同一个表数据库

转载 作者:行者123 更新时间:2023-11-30 12:23:41 25 4
gpt4 key购买 nike

我对来自数据库模型的 Entity Framework 有疑问。

我的问题归结为我的一个模型对一个表有多个引用。

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; }
}

在我的模型中,列是分别映射的,但是当同事从同一个数据库构建模型时,两者是相反的。

我认为问题在于第一个映射到 in 的是 primaryEngId并且 Db 约束称为 FK_Customer_Engineer

随后添加了分配的开发人员 ID,数据库约束称为 FK_Customer_Devloper

因此按字母顺序 Developer 排在 Engineer 之前, Entity Framework 现在以相反的方式映射它们。

我的代码在很多地方引用了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模型的属性。这应该足够了。但是,您将来所做的任何更改都必须在代码中而不是在数据库中完成。

IF 另一方面,您不断地从数据库中重新生成实体和上下文代码,请确保您所有的外键都具有有意义的名称,因为 EF 将使用它们来生成名称。(即它是未命名 Engineer1 出蓝色)重命名这些外键以反射(reflect)什么逻辑关系。也就是说,您很可能在数据库中有以下外键:

 FK_Customer_Engineer

FK_Customer_Engineer1

您需要将它们重命名为

 FK_Customer_PrimaryEngineer

FK_Customer_AssignedEngineer

更新:您可以像这样使用不同的列名称和属性名称:

[Column("PrimaryEngId")]
[ForeignKey("Primary")]
public int? PrimaryID { get; set; }

关于c# - Entity Framework 首先多次映射到同一个表数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com