LINQ更新方法不更新Db

时间:2010-11-05 18:13:27

标签: vb.net linq linq-to-sql

   Public Sub UpdateStaff(ByVal sr As StaffRecord)
             Dim oldSr As StaffRecord
             Dim q = From staff In db.StaffRecords Where staff.Employee_Number = sr.Employee_Number Select staff

    oldSr = q.First

    oldSr.Address_Line1 = sr.Address_Line1
    oldSr.Address_Line2 = sr.Address_Line2
    oldSr.Address_Line3 = sr.Address_Line3
    oldSr.Town_Or_City = sr.Town_Or_City
    oldSr.Contact1Name = sr.Contact1Name

    db.SubmitChanges()

End Sub

我写的辅助函数似乎除了更新数据库之外还做了我想做的一切。单步执行代码,oldSr将由新的sr参数更新,但不会更新提交更改。

2 个答案:

答案 0 :(得分:1)

试一试,我认为当你将q设置为oldSr时,你的上下文就会丢失。

Public Sub UpdateStaff(ByVal sr As StaffRecord)
             Dim q = (From staff In db.StaffRecords Where staff.Employee_Number = sr.Employee_Number Select staff).Single();

q.Address_Line1 = sr.Address_Line1
q.Address_Line2 = sr.Address_Line2
q.Address_Line3 = sr.Address_Line3
q.Town_Or_City = sr.Town_Or_City
q.Contact1Name = sr.Contact1Name

db.SubmitChanges()

End Sub

答案 1 :(得分:0)

如果Matthew的修复不起作用......我知道你所拥有的不是Entity Framework 1,但是在EF1中有一个方法,ApplyPropertyChanges,你可以调用它让它知道一个Entity已被更新:

db.ApplyPropertyChanges("EntityTypeName",oldSr);
db.SaveChanges();

我不确定你使用的是什么,但我猜测你可以使用类似的方法来强制上下文识别变化。

[编辑:添加评论] - 我希望发布一些不是真正答案但只是“寻找这种方法”答案的表格并不错。如果是的话,我道歉。

凯文