Как мне заставить платформу сущностей прекратить установку поля rowversion? - PullRequest
1 голос
/ 07 апреля 2009

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

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

У меня есть столбец VerCol в определении сущности, но я не могу удалить функцию "Сеттер".

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

Ответы [ 2 ]

4 голосов
/ 07 апреля 2009

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

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

0 голосов
/ 11 декабря 2011

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

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

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

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

coalesce(p._RowVersion, cast(0 as binary(6))) [PersonRowVersion]
...