如果我有以下实体:
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 字段设置为现在(执行 UPDATE 时)
当我说自动时,我的意思是我希望能够做到这一点:
poco.Name = "Changing the name";
repository.Save();
不是这个:
poco.Name = "Changing the name";
poco.LastModified = DateTime.Now;
repository.Save();
在幕后,“某事”应该自动更新日期时间字段。那“东西”是什么?
我正在使用 Entity Framework 4.0 - 有没有一种方法可以让 EF 自动为我做到这一点?(可能是 EDMX 中的特殊设置?)
从 SQL Server 端,我可以使用DefaultValue,但这仅适用于INSERT(而不是 UPDATE)。
同样,我可以使用 POCO 上的构造函数设置默认值,但这仅在实例化对象时才有效。
当然我可以使用触发器,但这并不理想。
因为我使用的是实体框架,所以我可以连接到SavingChanges事件并在此处更新日期字段,但问题是我需要“了解”POCO(目前,我的存储库是用泛型实现的)。我需要做一些面向对象的技巧(比如让我的 POCO 实现一个接口,并在上面调用一个方法)。我对此并不反对,但如果我必须这样做,我宁愿手动设置字段。
我基本上是在寻找 SQL Server 2008 或 Entity Framework 4.0 解决方案。(或智能 .NET 方式)
有任何想法吗?
编辑
感谢@marc_s 的回答,但我选择了一个更适合我的场景的解决方案。