使用Linq到SQL更新对象

时间:2012-06-01 03:12:32

标签: c# asp.net sql linq linq-to-sql

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

1 个答案:

答案 0 :(得分:0)

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

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

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

请参阅this similar question的已接受回复,其中讨论了存储库设计和工作单元设计模式。