Linq2SQL:未在datacontext中创建的更新对象

Nie*_*sma 4 c# asp.net linq-to-sql

通常在更新linq2sql中的对象时,从datacontext获取对象并使用相同的datacontext来保存对象,对吧?

更新一个尚未被用于执行保存操作的datacontext检索的对象的最佳方法是什么,即我使用flourinefx在flex和asp.net之间传递数据,以及当对象从客户端返回时保存我不知道如何保存对象?

   public static void Save(Client client)
    {
        CompanyDataContext db = new CompanyDataContext();
        Validate(client);
        if(client.Id.Equals(Guid.Empty))
        {
            //Create (right?):
            client.Id = Guid.NewGuid();
            db.Clients.InsertOnSubmit(client);
            db.SubmitChanges();
        }
        else
        {
            //Update:
            OffertaDataContext db = new OffertaDataContext();
            db.Clients.????

        }
    }
Run Code Online (Sandbox Code Playgroud)

更新:使用Attach的不同方法在这种情况下不起作用.所以我想需要一种基于反射的方法.

Mar*_*ell 6

要更新现有但已断开连接的对象,您需要"附加"它执行数据上下文.这将重新使用现有的主键等.您可以控制如何处理更改 - 即视为脏,或视为清洁并跟踪未来的更改等.

Attach方法就在桌面上 - 即

ctx.Customers.Attach(customer); // optional bool to treat as modified
Run Code Online (Sandbox Code Playgroud)

  • +1,另外:"可选的bool处理为已修改"仅在存在TimeStamp字段或指定不检查DBML中的更新时才有效.我在这里使用另一个解决方案:http://www.singingeels.com/Blogs/Nullable/2009/01/09/How_to_Make_LINQ_to_SQL_Check_for_Changes_After_Attach_or_AttachAll.aspx (2认同)