由于我在我的控制器(即使用ASP.NET MVC)和我的存储库之间进行中介的服务层,因此我决定在此处自动设置字段。
另外,我的POCO没有关系/抽象,它们是完全独立的。我想保持这种方式,而不要标记任何虚拟属性或创建基类。
所以我创建了一个接口IAutoGenerateDateFields:
public interface IAutoGenerateDateFields{ DateTime LastModified { get;set; } DateTime CreatedOn { get;set; }}对于任何希望自动生成这些字段的POCO,我都实现了此接口。
使用我的问题中的示例:
public class PocoWithDates : IAutoGenerateDateFields{ public string Poconame { get; set; } public DateTime CreatedOn { get; set; } public DateTime LastModified { get; set; }}现在,在我的服务层中,检查具体对象是否实现了接口:
public void Add(SomePoco poco){ var autoDateFieldsPoco = poco as IAutoGenerateDateFields; // returns null if it's not. if (autoDateFieldsPoco != null) // if it implements interface { autoDateFieldsPoco.LastModified = DateTime.Now; autoDateFieldsPoco.CreatedOn = DateTime.Now; } // ..go on about other persistence work.}稍后,我可能会在“添加到帮助器/扩展程序”方法中破坏该代码。
但是我认为这对我的情况来说是一个不错的解决方案,因为我不想在“保存”中使用虚拟机(因为我正在使用工作单元,存储库和Pure POCO),并且不想使用触发器。
如果您有任何想法/建议,请告诉我。



