Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Linq 实体框架-添加新对象_Linq_Frameworks_Entity_Savechanges - Fatal编程技术网

Linq 实体框架-添加新对象

Linq 实体框架-添加新对象,linq,frameworks,entity,savechanges,Linq,Frameworks,Entity,Savechanges,我有一个名为'Question'的实体类型,当我创建它的新实例并将它添加到实体集'Questions'(使用AddObject())时,而不是在上下文上调用SaveChanges()方法时,一切都正常。但是,当我添加了它,但还没有调用SaveChanges()并尝试对'Questions'执行一些linq时,查询结果不包含最近添加的'Question'对象,在调用SaveChanges()之前,它对linq似乎是不可见的。这是一个正确的行为,或者我遗漏了什么?我相信这是正确的行为,特别是当您指的

我有一个名为'Question'的实体类型,当我创建它的新实例并将它添加到实体集'Questions'(使用AddObject())时,而不是在上下文上调用SaveChanges()方法时,一切都正常。但是,当我添加了它,但还没有调用SaveChanges()并尝试对'Questions'执行一些linq时,查询结果不包含最近添加的'Question'对象,在调用SaveChanges()之前,它对linq似乎是不可见的。这是一个正确的行为,或者我遗漏了什么?

我相信这是正确的行为,特别是当您指的是实体框架时

这应该能够获取您在保存更改之前添加的对象,并在添加更改后调用ie:

ObjectStateManager.GetObjectStateEntries 

为了简单起见,我决定不使用LINQ,而是使用Count()方法来查看AddObject()之后我有多少疑问对象

得了8分


再次获得8

您的LINQ查询是否与添加对象的代码在同一个ObjectContext实例上工作。感谢回复Daniel。上下文实例是相同的。如果在添加新对象后第一次计数时有8个项目,第二次计数时又有8个项目,难道不应该有9个对象吗?我也希望有9个项目,但它是8:)感谢链接确实有ObjectStateManager.GetObjectStateEntries()方法执行时,我可以在其结果中看到我的对象,但这不是我想要的。为什么我需要添加对象,然后保存更改?我希望在将对象推送到源代码之前对该对象进行一些验证。可能我需要更改逻辑,在添加对象之前进行验证,然后保存。这里有相同的问题和解决方案:关键是在将更改持久化到数据库之前使用ObjectStateEntry对象。调用save changes后,将引发一个事件,在该事件中,可以对每个条目和每个“状态”进行验证,以便在更改进入数据库之前将其拒绝。
(_context.Questions.ToArray()).Count()
// defaultQuestion object initialization here ...
_context.Questions.AddObject(defaultQuestion);
(_context.Questions.ToArray()).Count()