0

我正在尝试为 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();
        }
}
4

1 回答 1

0

我相信您的问题是您正在创建单独的上下文来加载订单并稍后保存它。

您应该设计您的存储库以针对您可以在构建期间传递的上下文工作(或者最好通过 IoC 注入)。这样,两个操作都将针对相同的上下文工作。

请记住,实体绑定到它们的上下文,尝试混合它们会导致各种问题,尤其是延迟初始化或关联实体。

请参阅此类似问题的已接受回复,其中讨论了存储库设计和工作单元设计模式。

于 2012-06-01T05:09:32.597 回答