Как заставить структуру сущности прекратить установку поля rowversion?

Я использую Entity Framework, и у меня есть поле rowversion (отметка времени) в таблице для использования для параллелизма. Однако при обновлении объекта объекта он продолжает пытаться установить для столбца rowversion значение null, и я получаю сообщение об ошибке:

Свойство VerCol в LmpDemoRequest не может быть установлено на нулевое значение. Вы должны установить для этого свойства ненулевое значение типа «Byte[]».

У меня есть столбец VerCol в определении объекта, но я не могу удалить функцию «Setter».

Как заставить структуру сущностей прекратить попытки установить этот столбец?


person Community    schedule 07.04.2009    source источник


Ответы (2)


Вы можете передавать любые произвольные допустимые значения для полей RowVersion (например, DateTime.Now). Они будут перезаписаны значениями, сгенерированными сервером.

В будущих выпусках EF должна быть поддержка «теневых свойств», которые существуют в модели, но не в ваших классах. Эта функция была бы полезна в таких ситуациях, как эта.

person Konstantin Tarkus    schedule 07.04.2009
comment
Наверняка вы имеете в виду: это должно быть необходимой функцией для любой ORM. - person mendicant; 07.04.2009
comment
Этот ответ, кажется, работает, спасибо. Я действительно, действительно ненавижу, как такие мелочи проскальзывают в «готовое к производству» программное обеспечение. Я парень, работающий с PHP, и пытаюсь создать приложение C#/ASP.NET MVC, и подобные глупые вещи, которые также должны занять несколько секунд, чтобы найти решение, решаются часами. - person ; 07.04.2009
comment
Или вы можете просто использовать NHibernate, в котором все эти проблемы решены и работает более 5 лет. - person chadmyers; 07.04.2009

У меня был случай, когда представление включало столбец RowVersion из таблицы, которая была оставлена ​​в представлении... так что иногда этот столбец мог быть нулевым.

Но EF4 «знает», что столбец RowVersion не может быть нулевым, поэтому даже в простом запросе LINQ он выдавал InvalidOperationException:

Для свойства «PersonRowVersion» в «vVoteInfo» не может быть установлено значение «DBNull». Вы должны установить для этого свойства ненулевое значение типа «Byte[]».

В конце концов мне пришлось изменить представление, чтобы использовать это для столбца RowVersion, чтобы EF был доволен:

coalesce(p._RowVersion, cast(0 as binary(6))) [PersonRowVersion]
person Community    schedule 11.12.2011