我想问一下ObjectQuery.Execute方法。
假设我有这样的代码:
var cons = context.Contacts.Execute(MergeOption.AppendOnly);
//entries will be empty
var entries = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added |
EntityState.Deleted | EntityState.Modified | EntityState.Unchanged);据我所知,ObjectQuery.Execute将强制执行ObjectQuery。
在上面的代码中,当它被执行时,EF会向Database发送一些命令,
和cons变量,填充对象作为来自数据库的结果。
但是,为什么这些对象没有附加到ObjectContext?您可以检查这些对象的ObjectStateEntries (条目variabel将为空)。
那么,为什么我们必须设置MergeOption,而这些对象最终不会附加到ObjectContext呢?
为什么这些对象没有附加到ObjectContext?
你能告诉我如何在实际应用中使用ObjectQuery.Execute方法吗?因为我对它的功能感到困惑。
发布于 2015-09-24 02:59:38
Execute方法返回ObjectResult而不是ObjectQuery。因此,对于要物化的实体,我们必须将ObjectResult中的数据流式传输到任何其他集合类型。我们还可以遍历ObjectResult,以便通过上下文来物化和跟踪实体。
在您的示例中,您可以调用ToList(),这将使所有实体具体化并跟踪更改。因为无论如何都要调用ToList(),所以不需要调用Execute()。
var cons = context.Contacts.Execute(MergeOption.AppendOnly).ToList();
var entries = context.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged);https://stackoverflow.com/questions/6652924
复制相似问题