[英]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.