gpt4 book ai didi

poco - 有效地确定 EF 4 POCO 是否已经在 ObjectSet 中

转载 作者:行者123 更新时间:2023-12-01 04:17:51 26 4
gpt4 key购买 nike

我第一次在一个小项目中尝试使用 POCO 的 EF 4。在我的 Repository 实现中,我想提供一个 AddOrUpdate 方法,如果它是新的,它会将传入的 POCO 添加到存储库中,否则什么都不做(因为在调用 SaveChanges 时将保存更新的 POCO)。

我的第一个想法是这样做:

public void AddOrUpdate(Poco p)
{
if (!Ctx.Pocos.Contains<Poco>(p))
{
Ctx.Pocos.AddObject(p);
}
}

然而,这会导致 NotSupportedExceptionReferencing Non-Scalar Variables Not Supported 下所述(额外的问题:为什么不支持?)

只需删除 Contains部分并始终调用 AddObject 会导致 InvalidStateException :

An object with the same key already exists in the ObjectStateManager. The existing object is in the Unchanged state. An object can only be added to the ObjectStateManager again if it is in the added state.



很明显,EF 4 在某处知道这是基于 key 的重复项。

当 AddOrUpdate 被调用时,Repository 为新的或预先存在的对象更新 Pocos 以便随后对 SaveChanges() 的调用将做正确的事情是一种干净、有效的方式吗?

我确实考虑过在对象本身上携带一个 isNew 标志,但我试图尽可能地对持久性无知。

最佳答案

关于poco - 有效地确定 EF 4 POCO 是否已经在 ObjectSet 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2985659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com