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