Linq没有更新已更改的类属性

时间:2009-10-24 06:09:56

标签: linq-to-sql

首先,我已经阅读了类似的帖子,并没有看到他们如何解决这个问题。如果我遗漏了一些东西,请指出是什么。

我的Linq代码与Scott Gu的expensiveUnpopularProducts example非常相似。但是,就我而言,数据库没有使用新值进行更新。没有引发异常,并且所有变量似乎在调试器中都有合理的值(填充结果集,连接字符串正确,...)。

    using (MyDataContext db =
        new MyDataContext(CONNECTION_STRING))
    {
        var resultSet = from l in db.Logs
                            where l.ProcessCode == null
                            select l;

        foreach (var bm in resultSet)
        {
            bm.ProcessCode = 1;
            // Debugger shows bm.ProcessCode properly set
        }

        db.SubmitChanges();
    }

为什么SubmitChanges()不会导致数据库更新?

注意:这是我的真实方法的简化案例。真实的还将记录插入另一个表中。该插入工作正常,因此我确信连接字符串正确且正常运行。

2 个答案:

答案 0 :(得分:1)

编辑:查看this question的答案。它也可能是你的答案。答案结果是,除非桌面上有主键,否则LINQ to SQL不会进行更新。我打赌你还需要在课堂上设置ColumnAttribute的主键部分。由于您已使用代码生成器,因此在更新数据库中的表之后可能需要重新生成该部分。当然,假设这是问题。

具有ProcessCode属性的类是否实现INotifyPropertyChangedProcessCode属性是否会触发PropertyChanged事件?

您还需要确保DataContextObjectTrackingEnabled属性设置为true。它应该是默认的,但很容易检查。

您还可以使用GetChangeSet上的DataContext方法查看更新内容。它可以帮助调试。

答案 1 :(得分:0)

我的第一个猜测是你的Linq查询对任何匹配元素的resultSet执行深度复制。因此,当您执行db.SubmitChanges()时,您将在另一个数据副本上运行。如果在db.SubmitChanges()之前放置一个断点,你能看到db中的数据是否正确更新了吗?