我正在尝试为asp.net应用程序编写一些业务层逻辑来插入或更新对象。我从业务层获取一个对象,然后将其传回以保存到数据库中。数据上下文包含在业务层中,这是我认为导致异常的内容。
例外是“已尝试附加或添加非新的实体,可能已从另一个DataContext加载。这不受支持。”
我确定我错过了一些小设置,但我不确定是什么。
这是执行插入和更新的代码....
public static void Save(Order order)
{
using (TicketInformationDataContext db = new TicketInformationDataContext())
{
if (order.OrderID <= 0)
db.Orders.InsertOnSubmit(order);
else
{
db.ObjectTrackingEnabled = true;
ITable table = db.GetTable(typeof(Order));
table.Attach(order, true);
db.Orders.Attach(order, true);
}
db.SubmitChanges();
}
}
答案 0 :(得分:0)
我相信您的问题是您正在创建单独的上下文来加载订单,然后再保存它。
您应该设计您的存储库以对抗您在构造期间可以传递的上下文(或者最好通过IoC注入)。 这样,两个操作都可以在相同的上下文中工作。
请记住,实体绑定到它们的上下文,并且尝试混合它们会导致各种问题,尤其是在延迟初始化或关联实体时。
请参阅this similar question的已接受回复,其中讨论了存储库设计和工作单元设计模式。