linq to sql提交更改不起作用

Mac*_*que 2 c# wpf 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;
        }
Run Code Online (Sandbox Code Playgroud)

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

如果有人能指出我在哪里错过了将"ISVALID"值更新为数据库的逻辑,我会很高兴.

And*_*tan 5

首先,你的using(get_datacontext){...}街区在哪里?DataContext当你完成它们时,你需要处理它们!

无论如何...

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

我将检查Linq to Sql设计器中映射表中每个列的"更新检查"属性.最简单的方法是将主键列Always设置为并将所有其他列设置为Never.您也可以考虑将它们设置为WhenChanged.

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

哦,考虑其他事情 - 如果你的表没有在设计器中指定主键,你也可以得到这种行为 - 确保其中一列是.

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

  • :sql表中没有主键,在我设置主键后它现在可以工作。 (2认同)