我有一个“投资”实体,派生自“BaseEntity”。 如果我像这样创建并添加一个新的“投资”:
investment = new Investment();
investment.Name = "Investment 01";
_context.BaseEntities.AddObject(entity);
并查询计数(保存更改前)
_context.BaseEntities.OfType<Investment>().Count();
它返回零。在_context.SaveChanges();
之后,同一行返回1我做错了什么?
答案 0 :(得分:2)
你没有做错任何事。这就是EF的工作原理。在您执行SaveChanges
之前,不会对数据库进行任何更改 - 它被称为工作单元。您准备内存中的所有更改,然后在一次交易中将它们全部保存在一起。
答案 1 :(得分:0)
仍然处于插入状态的实体将不会包含在查询结果中,因为该对象尚未与SaveChanges()
执行_context.BaseEntities.OfType<Investment>().Count();
方法将向SQL服务器发出请求并返回在数据库中找到的结果。
使用GetObjectByKey
方法时,如果在ObjectContext
上找到了先前加载的实体,则从上下文实例中获取实体的方法也会以相同的方式作出反应。由于对象处于新/插入状态,因此上下文会将其视为不存在,直到保存。
编辑:
在问题的代码中,您正在使用_context并在您提及的评论中 _container.BaseEntities.Count()
这两个对象有什么区别?
答案 2 :(得分:0)
这是正确的行为,因为对象位于状态管理器中,直到您调用SaveChanges()。只有在您调用SaveChanges()后,该对象才会在您的计数中可用。