Дата создания и изменения MVC 3 имеют значения по умолчанию и триггеры в SQL Server 2008 R2, но все еще требуют значения - PullRequest
5 голосов
/ 15 сентября 2011

Я сгенерировал классы (DbContext), моделирующие мою базу данных (SQL Server 2008 R2), и в большинстве моих таблиц у меня есть стандартные ModifiedDate и CreatedDate (No Nulls).У каждого из них по умолчанию есть getdate () в SQLServer, и у меня есть триггер для обновления ModifiedDate при любых обновлениях.

Сгенерированные представления включали поля ModifiedDate и CreatedDate, которые я не хочу (пользовательне должен видеть их), поэтому я удалил их, но при добавлении новой записи с использованием сгенерированного представления Create я получаю сообщение об ошибке «Преобразование типа данных datetime2 в тип данных datetime привело к-range value ".

Затем я добавил некоторые значения по умолчанию, и он действительно добавил запись, но, естественно, он добавил мои введенные значения, а не значения SQL getdate (), которые я бы предпочел (я хочуэто показывать время сервера).Проверяя объект (db.SaveChanges ()), поля имеют значение {1/01/0001 12:00:00 AM}.

Как я могу использовать эти модели без ввода даты ???Я искал, но не нашел свой ответ ...; - (

1 Ответ

4 голосов
/ 16 сентября 2011

Это общая проблема как в Entity Framework, так и в Linq to SQL:

В Linq-To-SQL модель не знает значений по умолчанию и поэтому пытается присвоить их как "нулевые" - что в этом случае неприемлемо. Чтобы это исправить, откройте файл DBML и установите для параметра «Автоматически сгенерированное значение» значение «true» для рассматриваемых полей.

В Entity Framework все немного по-другому: в поле «StoreGeneratedPattern» вы устанавливаете «Identity» или «Computed». Вот описание:

http://msdn.microsoft.com/en-us/library/system.data.metadata.edm.storegeneratedpattern.aspx

EF сделает это автоматически для полей типа удостоверения, но не для значений по умолчанию / не пустых полей. Вы можете установить CreatedDate как «Identity» (обновляется только при вставке), а «ModifiedDate» - как «Computed» (обновляется при вставке и обновлении).

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

...