Если у меня есть следующий объект:
public class PocoWithDates
{
public string PocoName { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime LastModified { get; set; }
}
Что соответствует таблице SQL Server 2008 с тем же именем/атрибутами...
Как я могу автоматически:
- Установите для поля CreatedOn/LastModified значение сейчас (при выполнении INSERT)
- Установите для поля LastModified значение сейчас (при выполнении ОБНОВЛЕНИЯ)
Когда я говорю автоматически, я хочу, чтобы я мог это сделать:
poco.Name = "Changing the name";
repository.Save();
Не это:
poco.Name = "Changing the name";
poco.LastModified = DateTime.Now;
repository.Save();
За кулисами "что-то" должно автоматически обновлять поля datetime. Что это за "что-то"?
Я использую Entity Framework 4.0 - есть ли способ, которым EF может сделать это автоматически для меня? (может быть специальная настройка в EDMX?)
Со стороны SQL Server я могу использовать DefaultValue, но это будет работать только для INSERT (не UPDATE).
Аналогично, я могу установить значение по умолчанию, используя конструктор в POCO, но снова это будет работать только при создании экземпляра объекта.
И, конечно, я мог использовать триггеры, но это не идеально.
Поскольку я использую Entity Framework, я могу подключиться к событию SavingChanges и обновлять поля даты здесь, но проблема в том, что мне нужно "знать" о POCO (на данный момент, мой репозиторий реализуется с помощью генериков). Мне нужно было бы сделать какой-то трюк OO (например, сделать мой POCO реализованным интерфейсом и вызвать метод на этом). Я не против этого, но если я должен это сделать, я бы предпочел вручную установить поля.
Я в основном ищу решение для SQL Server 2008 или Entity Framework 4.0. (или умный способ .NET)
Любые идеи?
ИЗМЕНИТЬ
Спасибо @marc_s за его ответ, но я пошел с решением, которое лучше для моего сценария.