2
這是使用自追蹤實體添加/更新實體的方法,使用POCO的等效方法是什麼?實體框架4 POCO如何更新實體?
public Hero SaveHero(Hero hero)
{
using (WarEntities model = new WarEntities())
{
if (hero.ChangeTracker.State == ObjectState.Added)
{
model.Heroes.AddObject(hero);
model.SaveChanges();
hero.AcceptChanges();
return hero;
}
else if (hero.ChangeTracker.State == ObjectState.Modified)
{
model.Heroes.ApplyChanges(hero);
model.SaveChanges();
return hero;
}
else
return null;
}
}
當您使用第二個選項(更改實體的ObjectState)時,ObjectContext如何知道實體的哪些屬性實際上已被更改?我猜想生成的SQL命令是一個UPDATE語句,它只包含所有數據庫列。那是對的嗎?如果是這樣,更新可能不如按屬性更改屬性(您的第一個選項),其中更改跟蹤會通知哪些屬性發生了真正更改並生成更高效的UPDATE語句。我不確定我是否正確解釋了這兩種方案的優點和缺點。 – Slauma 2010-08-08 21:37:27
是的,你是正確的,第二個選項將更新所有屬性。不過,我認爲第一個版本的性能增益不會很明顯,但是(除非您使用大量數據進行大量批量更新)。 – Yakimych 2010-08-09 07:39:03