Использование Linq to Sql, не обновляет, но не выдает исключение - PullRequest
3 голосов
/ 22 марта 2010

Запуск .net 2008, asp.net, Linq to sql, sql server 2008 express

Foo f = db.Foo.First(x => x.ID == id);
f.IsValid = true;
db.SubmitChanges();

У меня есть очень простая таблица с несколькими полями и без ограничений FK. Ни один из данных не сохраняется, когда я вызываю .SubmitChanges (), но никакая ошибка не выдается. Есть идеи?

Не используя явную область транзакции, поля не генерируются автоматически и триггеры на сервере отсутствуют.

Ответы [ 4 ]

4 голосов
/ 22 марта 2010

Не обращайте внимания, первое, что нужно попробовать, это установить db.Log = Console.Out;, чтобы увидеть, есть ли какие-либо проблемы с TSQL (или лучше: запустить трассировку SQL).Если ничего не получено отправлено , то, возможно, IsValid было уже true - он не будет повторно сохранять такие изменения, если не должен (, если вы не нажмете ).

Менее вероятно, что вы могли случайно отключить отслеживание объектов (db.ObjectTrackingEnabled).

Другие распространенные ошибки:

  • не вызов Complete() при использовании TransactionScope (если вы используете TransactionScope)
  • с базой данных файлы (вместо отдельного сервера), проверка в исходном файле(в решении), а не в выводе сборки (обычно / bin / debug или /bin/release).

Я также предполагаю , что IsValid на самом делесвойство db-mapped (не обязательно)

2 голосов
/ 22 марта 2010

IsValid помечен как автоматически созданное поле в конструкторе?Если это так, никакие сделанные вами изменения не будут распространены обратно на сервер.Кроме того, возможно ли, что у вас есть триггер БД, который может быть запущен при обновлении, а не, скажем, при вставке, который устанавливает значение по умолчанию 0 (false)?

2 голосов
/ 22 марта 2010

Вам нужно установить IsValid на f, а не на x.

Foo f = db.Foo.First(x => x.ID == id); 
f.IsValid = true; 
db.SubmitChanges(); 

И не забудьте позвонить Complete на TransactionScope, если вы используете его.

1 голос
/ 22 марта 2010

Оказывается, что первичный ключ был удален из БД с момента моей последней работы с этим приложением. Когда я недавно восстановил .dbml, он генерировался без первичного ключа. Добавление этого обратно решило проблему.

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