2012-05-23 4 views
5

Я хотел бы иметь CreatedDate столбец в моей Accounts таблице, определяется следующим образом:Как использовать базу данных по умолчанию для столбца CreateDate в EF code-first 4.3?

CreatedDate DATETIME NOT NULL DEFAULT GETUTCDATE() 

Это карта к свойству CreatedDate в классе:

public class Account 
{ 
    public DateTime? CreatedDate { get; private set; } 
    // ... other properties ... 
} 

При создании новой учетной записи , Я хотел бы оставить CreateDate установленным в NULL, и пусть база данных заполнит его. При загрузке существующей учетной записи из БД я хотел бы, чтобы EF извлекал созданный с базы данных CreateDate.

Я использую первый код EF 4.3 с явной миграцией. Когда EF произвел миграцию для таблицы счетов, я изменил его следующим образом:

CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"), 

К сожалению, когда я пытаюсь отобразить таблицу с использованием EF 4.3, EF пытается вставить значение NULL в столбце CreatedDate.

Я попытался установить DatabaseGeneratedOption.Identity для свойства, as suggested by Ladislav Mrnka. Однако это удаляет параметр идентификации из свойства первичного ключа. Вместо этого я попытался использовать DatabaseGeneratedOption.Computed, но он продолжает пытаться вставить NULL. Я перевернул все миграции и перерисовал их - проблема все еще возникает.

Вот что я делаю в OnModelCreating:

modelBuilder.Entity<Account>().Property(a => a.CreatedDate) 
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 

Кто-нибудь есть какие-либо предложения?

Спасибо за вашу помощь,
Richard

ответ

4

Сделайте дату нон Nullable в вашей организации или обнуляемый в вашей базе данных. Значение по умолчанию базы данных используется только в том случае, если инструкция insert не отправляет явное значение. В случае EF это происходит, только если вы пометили CreatedDateDatabaseGeneratedOption.Identity. Если он удаляет личность по умолчанию из вашего первичного ключа, он вручную обрабатывает аннотации данных или свободный API.

+0

Thanks Ladislav! Оно работает. Я отметил столбцы CreateDate и my ID как с именем DatabaseGeneratedOption.Identity. Я оставил его как nullable в моей сущности и не-nullable в БД - но с опцией Identity, он больше не вставляет явный NULL. –

 Смежные вопросы

  • Нет связанных вопросов^_^