gpt4 book ai didi

c# - 使用代码优先的 Entity Framework 中的问题建模关系

转载 作者:太空狗 更新时间:2023-10-29 19:26:39 25 4
gpt4 key购买 nike

我尝试先在 Entity Framework 中学习代码,但在建立关系模型时遇到了问题。这是一个基本的 HR 数据库,为此有两个实体,员工和部门。

员工属于一个部门,该部门有一个团队管理员和一个经理,他们实际上都是员工。我尝试使用以下方法对此进行建模:

EMPLOYEE

public int? DepartmentID { get; set; }
public virtual Department Department { get; set; }

Context:

modelBuilder.Entity<Employee>().HasOptional(x => x.Department);

DEPARTMENT

public class Department
{
[Required]
public int DepartmentID { get; set; }

[Required(ErrorMessage = "The description is required.")]
public string Description { get; set; }

public int? ManagerID { get; set; }
public virtual Employee Manager { get; set; }

public int? TeamAdministratorID { get; set; }
public virtual Employee TeamAdministrator { get; set; }
}

Context:

modelBuilder.Entity<Department>().HasOptional(x => x.Manager);
modelBuilder.Entity<Department>().HasOptional(x => x.TeamAdministrator);

显然,我希望 Department 表只有四列 - DepartmentID、Description、ManagerID 和 TeamAdministratorID,但它为关系生成了额外的两列,即 Manager_EmployeeID 和 Team_Administrator_EmployeeID。此外,在 Employee 表中,生成列 Department_DepartmentID 以存储 DepartmentID,而不是使用我在实体中指定的 DepartmentID 列。

我做错了什么?我需要如何定义字段和关系以避免让代码首先忽略我指定的内容并在数据库中生成它自己的导航字段?

最佳答案

那是因为您的模型配置不完整 - 您使用 Fluent API 开始了自己的映射,因此您必须告诉 EF 这些属性确实是关系的 FK。供员工使用:

modelBuilder.Entity<Employee>()
.HasOptional(x => x.Department)
.WithMany()
.HasForeignKey(x => x.DepartmentID);

以及供部门使用:

modelBuilder.Entity<Department>()
.HasOptional(x => x.Manager)
.WithMany()
.HasForeignKey(x => x.ManagerID);
modelBuilder.Entity<Department>()
.HasOptional(x => x.TeamAdministrator);
.WithMany()
.HasForeignKey(x => x.TeamAdministratorID);

顺便说一句。如果关系对面没有集合导航属性,将很难使用模型(所有 WithMany 都是空的)。至少 Department 应该有:

public virtual ICollection<Employee> Employees { get; set;}

映射应修改为:

modelBuilder.Entity<Employee>()
.HasOptional(x => x.Department)
.WithMany(y => y.Employees)
.HasForeignKey(x => x.DepartmentID);

关于c# - 使用代码优先的 Entity Framework 中的问题建模关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322005/

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