【发布时间】:2015-06-10 17:33:07
【问题描述】:
在这段代码中
using (var db = new DbPerson())
{
var b = db.People.Create();
b.Name = "Homer";
db.People.Add( b );
Console.WriteLine( "Count: {0}", db.People.Count() );
foreach (var bb in db.People)
Console.WriteLine( bb.Name );
var fb = db.People.Find( b.Id ); // Id is a GUID generated in the Person ctor
// NOT a DB-generated Identity.
Console.WriteLine( "Found: {0}", fb != null );
db.SaveChanges();
Console.WriteLine( "Count: {0}", db.People.Count() );
}
输出如下所示:
Count: 0
Found: True
Count: 1
我看到其他关于 Count 的帖子在调用 SaveChanges 之前没有更新。好的,这就是“它的工作方式”。
我的问题具体是这样的:当Count() 返回0 并且枚举器不返回任何元素时,为什么Find 从db.People 返回一个对象? Find 和 Count() 不应该采取类似的行为,在返回处于“已添加”状态的实体之前等待 SaveChanges?
这是什么原因?我问是因为我正在编写一个轻量级的非 SQL 提供程序,它需要尽可能地反映 EF 的操作。我无法弄清楚是什么逻辑导致 Find 返回一个已添加的元素,而 Count() 和 GetEnumerator() 没有。我需要解决这些情况。
【问题讨论】:
标签: entity-framework