我正在尝试在名为AddOrUpdate的EF 4 POCO存储库上创建一个方法。
这个想法是业务层可以传入POCO对象,持久性框架将添加对象(如果它是新的(尚未在数据库中)),否则将更新数据库(一旦调用SaveChanges())新的价值。这与我提出的关于EF的其他一些问题类似,但我只有80%的人在理解这一点,所以请原谅部分重复。
我缺少的部分是在确定业务对象确实已经存在于数据库中之后如何更新传入业务对象的ObjectContext /关联ObjectSet中的对象图(现在已经加载了感谢到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();
}
答案 0 :(得分:0)
你必须为此编写代码。没有内置任何复制整个图形的内容。如你所说,ApplyCurrentValues
对于标量值可以正常工作。孩子们,你必须自己复制。
答案 1 :(得分:0)
问题是我的业务对象使用new()运算符来分配子对象,而不是从ObjectContext构造对象。如果你不能使用new(),那么POCO行为并不是真的,但至少它在重构之后才能正常工作。