gpt4 book ai didi

c# - 在没有辅助属性的情况下一对一映射 EntityFramework

转载 作者:行者123 更新时间:2023-11-30 22:05:33 26 4
gpt4 key购买 nike

上下文:

我有两个类在 SQL 中有两个对应的表。

  • 系统信息

    EF 版本:

    SQL 版本:2012

  • public class Employee
    {
    public Employee(string name,Department department )
    {
    Name = name;
    Department = department;
    }
    public int Id {get;set;}
    public string Name {get;set;}
    public Department Department {get;set;}
    }




    public class Department
    {
    public int Id {get;set;}
    public string Name {get;set;}
    }
  • 表格这些列与属性匹配,但 Employee 表具有外键列 DepartmentId。

  • 映射

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    modelBuilder.Entity<Employee>()
    .HasKey(e => e.Id)
    .HasRequired(s => s.Department);

    modelBuilder.Entity<Department>()
    .HasKey(e => e.Id);
    }

问题

当发出以下命令时:

dc.Empoyees.Add(new Employee("some employee",department));
dc.SaveChanges();

生成的插入 SQL 语句不包含外键,除非我在 Employee 下声明 DepartmentId 的属性以及 Department 属性。

问题

如何更改映射,以便 EF 生成正确的外键“DepartmentId”并将其插入到 Employee 表中?

或者还有其他方法吗?

当我已经将 Department 作为属性时,我不想维护 DepartmentId 属性。

最佳答案

如果您不将 FK 列包含在您的对象中,EF 将在幕后为您创建它,但它将被称为 Department_Id 而不是 DepartmentId。您可以按如下方式覆盖此名称:

modelBuilder.Entity<Employee>()
.HasKey(e => e.Id)
.HasRequired(s => s.Department)
.WithMany()
.Map(a => a.MapKey("DepartmentId"));

诚然,API 绝对不是显而易见的。这是一个包含配置关系示例的文档 - http://msdn.microsoft.com/en-us/data/jj591620 .

关于c# - 在没有辅助属性的情况下一对一映射 EntityFramework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24332454/

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