Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架4:添加dervied实体赢得';保存之前,不显示计数_Entity Framework_Inheritance_Entity Framework 4 - Fatal编程技术网

Entity framework 实体框架4:添加dervied实体赢得';保存之前,不显示计数

Entity framework 实体框架4:添加dervied实体赢得';保存之前,不显示计数,entity-framework,inheritance,entity-framework-4,Entity Framework,Inheritance,Entity Framework 4,我有一个从“基本实体”衍生而来的“投资”实体。 如果我创建并添加一个新的“投资”,如下所示: 并查询计数(保存更改前) \u context.BaseEntities.OfType().Count(); 它返回零。同一行在_context.SaveChanges()之后返回1 我做错了什么?你没有做错什么。这就是EF的工作原理。在执行SaveChanges之前,不会对数据库进行任何更改,这称为工作单元。您在内存中准备所有更改,然后将它们一起保存在一个事务中。仍处于插入状态的实体将不包括在查询结

我有一个从“基本实体”衍生而来的“投资”实体。 如果我创建并添加一个新的“投资”,如下所示:

并查询计数(保存更改前)

\u context.BaseEntities.OfType().Count();
它返回零。同一行在_context.SaveChanges()之后返回1


我做错了什么?

你没有做错什么。这就是EF的工作原理。在执行
SaveChanges
之前,不会对数据库进行任何更改,这称为工作单元。您在内存中准备所有更改,然后将它们一起保存在一个事务中。

仍处于插入状态的实体将不包括在查询结果中,因为该对象尚未使用
SaveChanges()保存。

执行
\u context.BaseEntities.OfType().Count()
使用
GetObjectByKey
方法时,如果以前加载了实体,则从上下文实例中获取实体的方法(位于
ObjectContext
上)也将以相同的方式进行响应。由于对象处于新建/插入状态,因此在保存之前,上下文将视其为不存在

编辑:

在您使用的问题代码中,以及在您提到的注释中 _container.BaseEntities.Count()


这两个对象之间有什么区别?

这是正确的行为,因为在调用SaveChanges()之前,对象一直处于状态管理器中。只有在调用SaveChanges()之后,对象才能在您的计数中可用。

I现在知道了。但我的理解是,DataContext应该给我正确的计数,因为它在内存中有新添加的对象。如果我这样做:_container.BaseEntities.Count()我得到了正确的数字。我想要一个“投资”的ObjectSet,而不是一个“ObjectQuery”。那么为什么我不能得到一个“投资”的ObjectSet呢?我实际上不想使用ObjectQuery。为什么不使用内存中的列表,然后提交到上下文中呢?这样做是可能的。。。但为什么要麻烦呢。我不明白为什么EF必须处理如此不同的派生实体。
investment = new Investment();
investment.Name = "Investment 01";
_context.BaseEntities.AddObject(entity);
_context.BaseEntities.OfType<Investment>().Count();