c# - linq to sql提交更改不起作用

标签 c# wpf linq-to-sql

我有一个 ListView ,其中包含 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){...} block 在哪里?您需要在处理完 DataContext 后处理它们!

无论如何...

我的猜测是更新语句生成的 where 子句过于紧凑,或者完全错误。

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

设计者的默认行为一般是对所有的事情都设置为Always;这不仅会导致可怕的 WHERE 更新子句,而且有时还会导致问题。显然,这种行为是正确的并发检查所必需的(即两个线程更新同一行);所以要注意这一点。

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

最后,您可以检查调用 SubmitChanges 时生成的 SQL;通过将 TextWriter 附加到 DataContext.Log属性(property);或者同样,如果您开始调试,VS2010 中的 IntelliTrace 将收集所有运行的 ADO.Net 查询。这对于调试为什么 L2S 东西没有按预期工作是非常宝贵的。

关于c# - linq to sql提交更改不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9231278/

相关文章:

c# - 我应该在退出主窗体之前中止并加入线程吗?

javascript - Web API - Controller 设计

c# - 为什么使用 `Checked` 属性会导致奇怪的错误事件只能发生在 += 或 -= 的右侧?

c# - 如何知道我的 linq 查询是否返回 null

c# - CompiledQuery 抛出 ArgumentException

c# - 如何使用 C# 对密码值进行加盐和哈希处理?

c# - 迭代直到达到 int.MaxValue

wpf - 检测触摸键盘何时在 WPF 中打开

c# - 检查 BIT 列时从 LINQ 生成的奇怪 SQL

c# - LINQ to SQL 为类似的分组依据表达式生成不同的查询