有效地确定objectset中的EF 4 POCO是否已经
-
24-10-2019 - |
题
我第一次尝试使用Poco的小型项目来尝试EF 4。在我的存储库实施中,我想提供一个方法addorupdate,如果它是新的,它将向存储库中添加传递的POCO,否则什么也不做(因为在调用Savechanges时将保存更新的POCO)。
我的第一个想法是这样做:
public void AddOrUpdate(Poco p)
{
if (!Ctx.Pocos.Contains<Poco>(p))
{
Ctx.Pocos.AddObject(p);
}
}
但是,这导致了 NotSupportedException
如下记录 引用非量表变量不支持 (奖励问题:为什么不支持?)
只是删除 Contains
部分并始终调用AddObject结果 InvalidStateException
:
具有相同密钥的对象已经存在于对象statemanager中。现有对象处于不变状态。只有对象在添加的状态中,才能再次将对象添加到ObjectStateManager。
因此,显然EF 4在某处知道这是基于密钥的重复。
当调用AddOrupDate时,存储库更新新的或预先存在的对象的POCOS是什么干净,有效的方法,以便随后的SaveChanges()调用将做对的事情?
我确实考虑在对象本身上载有isnew旗,但我试图将坚持不懈的无知毫无用处。
解决方案
尝试看 ObjectStateManager, ,很好地描述了 此stackoverflow Queston.
不隶属于 StackOverflow