簡體   English   中英

沒有輔助屬性的情況下一對一映射EntityFramework

[英]Mapping EntityFramework One to One without Helper Property

語境:

我有兩個類,在SQL中有兩個對應的表。

  • 系統信息

    EF版本:<package id =“ EntityFramework” version =“ 6.1.0” targetFramework =“ net45” />

    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();

除非我在Employee下與Department屬性一起聲明DepartmentId的屬性,否則生成的插入SQL語句不包含外鍵。

問題

如何更改映射,以便EF生成正確的外鍵'DepartmentId'並將其插入Employee表?

還是還有其他方法?

當我已經將Deparment作為屬性時,我不想維護DepartmentId屬性。

如果您不將EF列包含在對象中,則EF會在幕后為您創建FK列,但它將稱為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/zh-cn/data/jj591620

您不必維護該屬性,但將需要它。 這就是實體框架檢索到的內容,然后用於獲取當時或以后的部門。

但是,如果設置部門對象,則應設置ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM