【发布时间】:2025-02-23 10:40:02
【问题描述】:
如果我有以下实体:
public class PocoWithDates
{
public string PocoName { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime LastModified { get; set; }
}
这对应于具有相同名称/属性的 SQL Server 2008 表...
我如何自动:
- 将记录的 CreatedOn/LastModified 字段设置为 now(执行 INSERT 时)
- 将记录的 LastModified 字段设置为 now(进行 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's(不适用于 UPDATE's)。
同样,我可以使用 POCO 上的构造函数设置默认值,但同样只有在实例化对象时才有效。
当然我可以使用触发器,但这并不理想。
因为我使用的是实体框架,所以我可以挂钩 SavingChanges 事件并在此处更新日期字段,但问题是我需要“了解” POCO(目前,我的存储库是用泛型实现的)。我需要做一些面向对象的技巧(比如让我的 POCO 实现一个接口,并在上面调用一个方法)。我对此并不反对,但如果我必须这样做,我宁愿手动设置字段。
我基本上是在寻找 SQL Server 2008 或 Entity Framework 4.0 解决方案。 (或智能的 .NET 方式)
有什么想法吗?
编辑
感谢@marc_s 的回答,但我选择了一个更适合我的场景的解决方案。
【问题讨论】:
-
我刚刚又问了这个问题,但是对于 EF6,因为我喜欢这个问题和提供的解决方案,但提供的代码示例不适用于目前的 EF6.0。跨度>
标签: c# .net sql-server-2008 entity-framework-4 datetime-generation