Linq to Sql - 更新除主键之外的所有字段

时间:2009-10-22 17:31:04

标签: .net linq-to-sql

我正在尝试使用Linq to Sql更新数据库中的记录。我想更新所有字段,这些字段将来自一个新对象,但是如果我尝试这个:

originalObject = newObject
db.submitChanges()

它不会保存更改,因为它认为主键已更改(或者沿着这些行的某些内容......它没有给出任何错误但不更新数据库中的对象)

我尝试覆盖它:

Dim originalKey = originalObject.MyPrimaryKey
originalObject = newObject
originalObject.MyPrimaryKey = originalKey
db.SubmitChanges()

......但这也不起作用。如果我设置了各个属性,它们将被保存(即:originalObject.PropertyName =“New Value”)然后submitChanges,它可以工作,但该对象有大约一百个属性,我不想单独更新每个属性。那么,如何成功更新对象和submitChanges()?

2 个答案:

答案 0 :(得分:1)

如果你已经有了修改后的实体对象,你应该可以使用(yourDataContext)。(yourTable).Attach(modifiedObject,true),然后是SubmitChanges。

答案 1 :(得分:0)

下面代码的目标是更新数据库上的实体,而不必将分离对象中的字段映射到附加对象(在数据库中)。

var dtCxt = Util.GetDtCxt();
dtCxt.YourTable.Attach(detachedObject, GetObjectById(detachedObject.id));
dtCxt.SubmitChanges();

GetObjectById使用另一个DataContext。你必须这样做。

private Incoterm GetObjectById(int id)
{
    var dtCxt = Util.GetDtCxt();
    return dtCxt.YourTable.FirstOrDefault(i => i.id == id);
}