linq to sql提交更改不起作用

我有一个列表视图,在wpf Customername和Isvalid中有两个列。我正在使用linq to sql从我的sql表中获取数据。当我尝试将值更新到表时,我没有看到对表的任何更改。

当我点击保存按钮时,这是我的代码:

try { CustomersDataContext dataContext = new CustomersDataContext(); Customer customerRow = MyDataGrid.SelectedItem as Customer; string m = customerRow.CustomerName; Customer customer = (from p in dataContext.Customers where p.CustomerName == customerRow.CustomerName select p).Single(); customer.Isvalid=false; dataContext.SubmitChanges(); MessageBox.Show("Row Updated Successfully."); } catch (Exception Ex) { MessageBox.Show(Ex.Message); return; } 

我可以看到我能够根据所选的客户名查询记录,但该值未更新。

如果有人能指出我错过了将“ISVALID”值更新为数据库的逻辑,我会很高兴。

首先,你的using(get_datacontext){...}块在哪里? 完成后,您需要处理DataContext

无论如何…

我的猜测是update语句生成的where子句太紧,或者只是完全错误。

我将检查Linq to Sql设计器中映射表中每个列的“Update Check”属性。 最简单的方法是将主键列设置为Always ,并将所有其他列设置为Never 。 您还可以考虑将它们设置为WhenChanged

设计者的默认行为通常是将其设置为Always for everything; 这不仅会导致可怕的WHERE条款更新,而且偶尔也会导致问题。 显然,这种行为是正确的并发检查所必需的(即两个线程更新同一行); 所以要注意这一点。

哦,想到别的东西 – 如果你的表没有在设计器中指定主键,你也可以得到这种行为 – 确保其中一列是。

最后,您可以检查调用SubmitChanges时生成的SQL; 通过将TextWriter附加到DataContext.Log属性; 或者同样,VS2010中的IntelliTrace将收集所有在调试时运行的ADO.Net查询。 这在调试为什么L2S内容不能按预期工作时非常有用。

您应该将更新的客户添加到更新客户列表中。 我的意思是在保存更改之前,您应该执行以下操作:db.AddToCustomers(customer)。 在EF中使用AddToCustomers,我完全不知道它在LINQ中的等价物。