【发布时间】:2013-12-26 21:59:16
【问题描述】:
在实体框架中处理以下场景的推荐方法是什么?
我有一些与会话相关的数据存储在一个名为SessionData 的类中(它使用单例模式)。此类中的属性之一称为Basket。 Basket 类有一个BasketItems 的集合。
所以当篮子初始化时,它会被添加到数据库并存储在会话中:
var basket = new Basket();
using(var db = new DataContext())
{
db.Baskets.Add(basket);
db.SaveChanges();
}
SessionData.Current.Basket = basket;
然后当一个购物篮项目被添加到购物篮时:
using(var db = new DataContext())
{
var basketItem = new BasketItem() { initialisation here }
SessionData.Current.Basket.BasketItems.Add(basketItem);
db.SaveChanges();
}
这不起作用,因为SessionData.Current.Basket 未附加到当前 DbContext。我试过使用:
db.Baskets.Attach(SessionData.Current.Basket)
这在第一次调用时有效,但在以下调用时失败并出现以下错误:
ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象。
对存储在当前 DbContext using 块之外的实体(及其层次结构)进行此更新的推荐方法是什么?
【问题讨论】:
-
为什么
SessionContext有上下文? (或者,为什么是它是一个EF上下文?)。 -
@GertArnold 抱歉,我可能将这个问题与我的 SessionContext 类的名称混淆了。这与 DbContext 或 EF 无关。我现在将更新我的问题以消除这种混乱。
-
@DanielAuger 谢谢,今晚稍后会看看那个帖子。
-
@DanielAuger 感谢您的链接 - 答案中的链接很有帮助。我不认为这是一个重复的问题,因为问题并不完全相同。它确实帮助我解决了我的问题。
标签: c# entity-framework entity-framework-6