EF是如何选择加法运算的顺序的

本文关键字:运算 顺序 选择 何选择 EF | 更新日期: 2023-09-27 18:04:35

我正在研究asp.net mvc web应用程序+实体框架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");
        }

现在我认为上面的方法会引发一个异常,因为我已经定义了在添加部门之前添加t.Emps.Add(e);,这应该会引发一个异常,即Emp.DeptID不能为零(因为没有任何部门具有零id)。但实际发生的情况是,财政部和;我的问题是EF是如何处理上述方法的?唯一有效的方法是EF先添加了深度,不像我指定的顺序?

EF是如何选择加法运算的顺序的

EF总是会弄清楚如何以正确的顺序执行SQL语句,无论是插入、更新还是删除,无论它们是如何混合的。你唯一的任务是在内存中构建一个对象结构(或"图"),并将对象标记为添加/更新/删除,你可以按任意顺序执行。

如果我们必须按照正确的顺序创建和附加对象,这将是一个很大的麻烦。当应用程序变得非常复杂时,这几乎是不可能的。