Entity Framework 4.1 Автоматическая дата - PullRequest
5 голосов
/ 24 июня 2011

Я довольно новичок в Entity Framework (и asp.net mvc 3), и это мой первый опыт работы с кодом EF4.1.

Мой вопрос прост: когда я генерирую через модель новую таблицу для базы данных, я хотел бы сделать

  1. Автоматически добавлять текущую дату и время в поле при создании новой строки.
  2. Автоматически обновлять поле каждый раз, когда оно обновляется.

На самом деле переменная выглядит так:

 [DisplayName("Data Modifica")]
 [DataType(DataType.DateTime)]
 [DisplayFormat(DataFormatString = "{0:d}")]
 public DateTime DataModifica { get; set; }

Полагаю, я мог бы написать что-то о событии OnModelCreating datacontext, но я слишком новичок, чтобы уже освоить это:)

Может кто-нибудь помочь?

спасибо заранее, V.

Ответы [ 2 ]

10 голосов
/ 24 июня 2011

Это не имеет ничего общего с созданием модели.«Модель» - это описание вашего отображения между классами и базой данных.OnModelCreating используется для изменения определения отображения, а не для изменения данных.Это не имеет ничего общего с данными в самом экземпляре объекта.

Если вы хотите автоматическое изменение, вы можете переопределить SaveChanges:

public override int SaveChanges()
{
     DateTime now = DateTime.Now;
     foreach (var entity in ChangeTracker.Entries<YourEntityType>()
                                         .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified)
                                         .Select(e => e.Entity))
     {
          entity.DateModifica = now; // set the date
     }

     return base.SaveChanges();
}
0 голосов
/ 20 июня 2012

Почему бы не определить свойство как свойство с полем поддержки, которое инициализируется значением по умолчанию?

private DateTime _dateOfRequest = DateTime.Today;
   [Display(Name = "Date of Request"), DataType(DataType.Date)]
   public System.DateTime DateOfRequest {
        get { return _dateOfRequest; }
        set { _dateOfRequest = value; }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...