EF4 с SQL Compact 4, версия строки не обновляется при сохранении - PullRequest
1 голос
/ 11 июля 2011

У меня есть простое консольное приложение, использующее SQL Compact 4.0 и структуры сущностей 4. В базе данных есть одна таблица с именем Section, которая имеет три столбца: Id (StoreGeneratedPattern: Identity, Type: Int32) , Title (Тип: строка) и TimeStamp (StoreGeneratedPattern: Computed, ConcurrencyMode: Fixed, Тип: Binary, MaxLength: 8) . Столбец TimeStamp на самом деле является типом строки в SQL Compact.

У меня есть следующий код в основном:

Section section = new Section();
section.Title = "Hello";

using (Entities1 context = new Entities1())
{
    context.Sections.AddObject(section);                
    context.SaveChanges();

    section.Title = "Changed";
    context.SaveChanges();
}

Этот код вызывает исключение параллелизма, поскольку столбец TimeStamp не обновляется из базы данных после первого метода SaveChanges (). Обратите внимание, что он отлично работает в SQLServer2008.

Это ошибка в Compact или я что-то упустил?

Спасибо

Даррен

Ответы [ 3 ]

0 голосов
/ 11 июля 2011

Похоже на неподдерживаемую функцию в EF в сочетании с SQL CE.Возможно, это даст более глубокое понимание:

EF / SQL CE / автоматически сгенерированные первичные ключи

Невозможно обновить столбец Rowversion в SQL CE - возможно, этоконфликтует с EF, пытающимся обновить его, когда вы сохраняете

но этот один говорит сам за себя:

Lexis, известная проблема 4.1.1Это приведет к проблемам только тогда, когда вы попытаетесь выполнить операции DML для таблицы со столбцом Identity или Rowversion.С точки зрения выбора заявлений нет проблем, все должно работать.Если вам нужно, чтобы в вашем приложении были операторы DML против SQLCE, в схеме не должно быть столбцов Identity и Rowerversion.Остальное все будет работать нормально, и Entity Framework добавит данные для вас.Если после этого у вас возникнут какие-либо проблемы, пожалуйста, дайте мне знать, я буду рад помочь.С уважением, Рави Тандон.

Это где-то внизу комментариев к сообщению.Где DML стоит Язык манипулирования данными (читай: Вставить / Обновить / Удалить).

0 голосов
/ 13 июля 2011

Я нашел проблему. Оказывается, это ошибка в конструкторе edmx, когда свойство StoreGeneratedPattern не записывается в базовый XML-файл. Он сохраняется только в части CSDL, но не в части SSDL. См. http://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/ Обратите внимание, что в этом блоге он говорит, что он исправлен в VS2010 SP1, у меня есть эта версия, а в моей нет!

Ввод его вручную в xml-файл устранил проблему. К сожалению, последующие изменения очищают его снова.

Даррен

0 голосов
/ 11 июля 2011

Может быть: context.Refresh (System.Data.Objects.RefreshMode.ClientWins, раздел); после первого SaveChanges

...