我正在开发一个asp.net mvc web应用程序+ Entity Framework 6.0。我使用EF Db-Context在我的Web应用程序中映射了我的数据库表。我有两个模型类Emp&部门如下: -
public partial class Dept
{
public Dept()
{
this.Emps = new HashSet<Emp>();
}
public int DeptID { get; set; }
public string DName { get; set; }
public virtual ICollection<Emp> Emps { get; set; }
}
//----
public partial class Emp
{
public Emp()
{
this.Accounts = new HashSet<Account>();
}
public int EMPID { get; set; }
public string name { get; set; }
public int DeptID { get; set; }
public virtual Dept Dept { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
}
现在需要Emp.DeptID
FK,所以我编写了以下测试方法来测试EF是否足够聪明以重新排序添加操作: -
public ActionResult Index()
{
Dept d = new Dept() { DName="test5"};
Emp e = new Emp() { name="test5test5"};
t.Emps.Add(e);
d.Emps.Add(e);
t.Depts.Add(d);
t.SaveChanges();
return Content("5");
}
现在我虽然上面的方法会引发异常,因为我已经定义了在添加dept之前添加t.Emps.Add(e);
这会引发一个异常,即Emp.DeptID不能为零(因为没有任何异常)部门为零的部门)。但实际发生的是Dept&amp; Emp被添加了,所以我的问题是EF如何处理上述方法?唯一有效的方法是EF首先添加了部门,与我指定的顺序不同?
答案 0 :(得分:1)
EF将始终弄清楚如何以正确的顺序执行SQL语句,无论是插入,更新还是删除,无论它们是如何混合的。您唯一的任务是在内存中构建对象结构(或“图形”),并将对象标记为已添加/更新/删除,您可以在任何顺序中执行此操作。
如果我们必须按照正确的顺序创建和附加对象,那将是一个很大的麻烦。当应用程序变得有点复杂时,这几乎是不可能的。