Linq не обновляет измененное свойство класса - PullRequest
2 голосов
/ 24 октября 2009

Прежде всего, я прочитал подобные посты и не вижу, как они решают эту проблему. Если я что-то упустил в них, пожалуйста, укажите что.

Мой код Linq очень похож на пример дорогого непопулярного продукта Скотта Гу . Однако в моем случае база данных не обновляется с новым значением. Не возникает никаких исключений, и все переменные в отладчике имеют приемлемые значения (заполненный результирующий набор, правильная строка подключения, ...).

    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 ]

1 голос
/ 24 октября 2009

РЕДАКТИРОВАТЬ: см. Ответ на этот вопрос . Это может быть ответом и для вас. Ответ оказался таковым: LINQ to SQL не будет обновлять данные, если в таблице нет первичного ключа. Могу поспорить, вам также нужно установить первичные ключевые части ColumnAttribute в классе. Поскольку вы использовали генератор кода, вам может потребоваться восстановить эту часть после обновления таблицы в базе данных. Предполагая, что это проблема, конечно.

Реализует ли класс со свойством ProcessCode INotifyPropertyChanged? И запускает ли свойство ProcessCode событие PropertyChanged?

Вам также необходимо убедиться, что DataContext имеет свойство ObjectTrackingEnabled, установленное в значение true. Это должно быть по умолчанию, но это легко проверить.

Вы также можете использовать метод GetChangeSet на DataContext, чтобы увидеть, что это за обновления. Это может помочь с отладкой.

0 голосов
/ 24 октября 2009

Мое первое предположение состоит в том, что ваш запрос Linq выполняет глубокое копирование в resultSet любых соответствующих элементов. Таким образом, когда вы выполняете db.SubmitChanges (), вы работаете с другой копией данных. Если вы поставили точку останова прямо перед db.SubmitChanges (), можете ли вы увидеть, что данные в базе данных правильно обновлены?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...