Linq2Sql:将实体重新附加到datacontext但不是原始的datacontext问题

时间:2009-09-04 14:09:00

标签: c# sql-server linq-to-sql datacontext

任何人都可以帮忙吗?我有一个问题linq2sql并尝试通过datacontext附加(更新)一个实体类,它抱怨它不是原始上下文,这是真的(见下面的代码)...我认为这是打开datacontext的最佳做法不需要时关闭它?

我基本上让我的应用程序调用一个服务层,而服务层又调用db上下文所在的存储库....你可以在这里看到我有2个数据上下文,并且每个方法中都定义了一个datacontext ...

基本上发生了什么是我的应用程序“获取”预订...然后应用程序更新实体类“预订”,然后重新发送到“更新”预订..任何人都可以帮助..我完全被卡住

这是basicallly我的代码

    public bool UpdateReservation(Reservation reservation)
    {
        bool success = false;
        try
        {
            ResDataContext db = new ResDataContext ();

            db.Reservations.Attach(reservation);
            db.SubmitChanges();
            success = true;

        }
        catch (Exception ex)
        {
            Console.WriteLine("");

        }


        return success;

    }

    public Reservation GetReservation(string reservationNumber)
    {
        ResDataContext db = new ResDataContext ();

        return db.Reservations.Where(r => r.ReservationNumber == reservationNumber).SingleOrDefault(); 
    }

2 个答案:

答案 0 :(得分:0)

您可以先从DataContext收集正确的Reservation对象,然后更新并提交它。

像这样:

 public bool UpdateReservation(Reservation reservation)
{
    bool success = false;
    try
    {
        ResDataContext db = new ResDataContext ();

        Reservation res = db.Reservations.Where(r => r.ReservationNumber == reservation.ReservationNumber).Single();
        db.Reservations.InsertOnSubmit(res);
        db.SubmitChanges();
        success = true;

    }
    catch (Exception ex)
    {
        Console.WriteLine("");

    }


    return success;

}

答案 1 :(得分:0)

问题在于您没有重新连接到相同的数据上下文。

您需要在调用之间保持ResDataContext的活动状态。

  • 在包含ResDataContext的类上创建一个属性。
  • 构造函数中的Instanciate ResDataContext
  • 如果您的通话是通过WCF进行的,则需要使用每次通话

这是Eniity Framework(不是linq to SQL),但问题类似:

Entity Framework: AttachAsModified failure / confusion :)