それはこのように書きます:奇妙な行動は
MyDbContext ctx = new MyDbContext();
IFooRepository repo = new FooRepository(ctx);
var items = repo.GetAvailableItem().ToList(); //this will query all item.sold = false.
// here it returns three rows
foreach(var item in items) {
item.sold = true;
}
repo.commit(); // this will call the SaveChanges() in DbContext
Thread.sleep(10000)
// Now I quickly execute a query in SQL Server Management Studio
// UPDATE Item SET Sold = 0;
var items02 = repo.GetAvailableItem().ToList(); // this will query all item.sold = false.
// here items02 also contains three rows
// HOWEVER, when I watch the value of item.sold in items02, it is all True
これは仕様による動作ですか?
なぜですか?それはDbContextがエンティティをキャッシュし、同じクエリを再度実行しても更新されないためですか?ここで
UPDATE
私のレポのコードです:
public IQueryable<Item> GetAvailableItem()
{
var items = from x in DbContext.Item
where x.Sold == 0
select x;
return items;
}
public virtual int Commit()
{
return DbContext.SaveChanges();
}
があなたの 'GetAvailableItemを()'ポストと '()'メソッドをコミットしてくださいを参照してください。何かが間違っていると思われる –