我正在尝试使用Linq to Sql更新数据库中的记录。我想更新所有字段,这些字段将来自一个新对象,但是如果我尝试这个:
originalObject = newObject
db.submitChanges()
它不会保存更改,因为它认为主键已更改(或者沿着这些行的某些内容......它没有给出任何错误但不更新数据库中的对象)
我尝试覆盖它:
Dim originalKey = originalObject.MyPrimaryKey
originalObject = newObject
originalObject.MyPrimaryKey = originalKey
db.SubmitChanges()
......但这也不起作用。如果我设置了各个属性,它们将被保存(即:originalObject.PropertyName =“New Value”)然后submitChanges,它可以工作,但该对象有大约一百个属性,我不想单独更新每个属性。那么,如何成功更新对象和submitChanges()?
答案 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);
}