значение по умолчанию datetime2, структура объекта - PullRequest
5 голосов
/ 17 августа 2011

У меня есть таблица с типом столбца datetime2 (это было datetime, но EF, как я вижу, работает с datetime2).Я установил это как не нуль и со значением по умолчанию SYSDATETIME().Чтобы работать нормально, я установил свойство, которое сопоставляется с этим столбцом в модели EF, как Computed.Теперь, когда я не устанавливаю какое-либо значение в этом свойстве, я вижу в таблице неформальную запись, но когда я пытаюсь установить значение из кода, оно игнорирует его и во всех случаях устанавливает SYSDATETIME().

Как этоможно вставить значение по умолчанию, которое устанавливается в БД, если в свойстве модели нет значения, и значение свойства, если оно не равно нулю и не установлено?

РЕДАКТИРОВАТЬ: Вот пример кода

.....
ActionsJournal actionsJournalEntry =
 TestFactory.CreateActionEntry(.....);

if (/* some condition */)
{
  actionsJournalEntry.CreatedDate = DateTime.Now.AddDay(30); // else it will be null
}

ent.ActionsJournals.AddObject(actionsJournalEntry);

ent.SaveChanges();
....

1 Ответ

4 голосов
/ 17 августа 2011

Краткий ответ: это невозможно без обходного пути.

Вы должны либо установить StoreGeneratedPattern.Computed и всегда устанавливать значение в базе данных, либо вы должны установить StoreGeneratedPattern.None и всегда устанавливать значение в приложении. Разница в том, что если вы установите Computed, то оно никогда не передаст ваше значение в операторах update или insert, тогда как None пропустит его всегда, даже если вы его не установите, = приводит к дате по умолчанию, которая равна 1.1.0001, и причине, по которой вы думаю, что EF использует DATETIME2.

Другая проблема заключается в недостатке дизайна в designer / EF, который не позволяет установить значение по умолчанию для DateTime.

Обход:

Установите значение по умолчанию для вашей даты и времени в пользовательском параметре без конструктора вашей сущности и установите StoreGeneratedPattern в None:

public partial class ActionsJournal 
{
    public class ActionsJournal() {
        CreatedDate = DateTime.Now.AddDay(30);
    }
}

Теперь у вас всегда будет значение по умолчанию для вашего CreatedDate, если ваше приложение или загрузка из базы данных не перезапишут его другим значением.

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