我有两个在SQL中有两个对应表的类。
系统信息
EF版:< package id =" EntityFramework"版本=" 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();
生成的插入SQL语句不包含外键,除非我在Employee下声明DepartmentId的属性以及Department属性。
如何更改映射,以便EF生成并插入正确的外键&#39; DepartmentId&#39;进入员工表?
或者还有其他方法吗?
当我已将Deparment作为属性时,我不想维护DepartmentId属性。
答案 0 :(得分:3)
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。
答案 1 :(得分:0)
您不应该维护该属性,但您需要它。这就是实体框架检索然后用于获取部门的时间。
但是如果你设置了应该设置ID的部门对象。