【发布时间】:2010-06-08 01:47:25
【问题描述】:
我正在尝试在名为 AddOrUpdate 的 EF 4 POCO 存储库上创建一个方法。
这个想法是业务层可以传入一个 POCO 对象,如果该对象是新的(尚未在数据库中),持久性框架将添加该对象,否则将更新数据库(一旦调用 SaveChanges())新值。这与我问过的关于 EF 的其他一些问题类似,但我只有大约 80% 的人理解这一点,所以请原谅部分重复。
我缺少的部分是一旦我确定业务对象确实已经存在于数据库中(现在已经加载,谢谢TryGetObjectByKey)。 ApplyCurrentValues 听起来有点像我想要的,但它只复制标量值,似乎并不打算更新 ObjectContext/ObjectSet 中的对象图。由于我的特殊用例,我现在不关心并发。
public void AddOrUpdate(BO biz)
{
object obj;
EntityKey ek = Ctx.CreateEntityKey(mySetName, biz);
bool found = Ctx.TryGetObjectByKey(ek, out obj);
if (found)
{
// How do I do what this method name implies? Biz is a parent with children.
mySet.TellTheSetToUpdateThisObject(biz);
}
else
{
mySet.AddObject(biz);
}
Ctx.DetectChanges();
}
【问题讨论】: