linq到sql提交更改不起作用
本文关键字:不起作用 提交 sql linq | 更新日期: 2023-09-27 18:23:58
我有一个列表视图,在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设计器中检查映射表中每列的"更新检查"属性。最简单的做法是将主键列设置为Always
,并将所有其他列设置为Never
。您也可以考虑将它们设置为WhenChanged
。
设计者的默认行为通常是将其设置为Always
;这不仅会导致可怕的WHERE
更新子句,而且偶尔也会导致问题。显然,这种行为对于正确的并发检查(即两个线程更新同一行)是必需的;所以要注意这一点。
哦,想想其他事情——如果你的表在设计器中没有指定主键,你也可以得到这种行为——确保其中一列是。
最后,您可以检查调用SubmitChanges
时生成的SQL;通过将TextWriter附加到DataContext.Log属性;或者,VS2010中的IntelliTrace将收集在调试开始时运行的所有ADO.Net查询。这对于调试L2S东西为什么不能按预期工作是非常宝贵的。
您应该将更新的Customer添加到更新的客户列表中。我的意思是,在保存更改之前,您应该执行以下操作:db。AddToCustomers(客户)。AddToCustomers在EF中使用,我完全不知道它在LINQ中的等价物。