【发布时间】:2011-11-30 06:58:43
【问题描述】:
我有一个带有 UI、业务(实体)和数据(DbContext)层的 ASP.NET MVC3 Web 应用程序。我正在使用实体框架 4.1 代码优先。现在,我正在覆盖数据层中的DbContext.SaveChanges(),以便我可以为对实现我的IAuditable 接口的任何实体对象所做的所有更改设置ModifiedDate。我有一个返回DateTime.Now 的静态DateProvider 类和方法(GetCurrentDate)(除非我正在运行测试,在这种情况下,它会返回我告诉它的任何内容)。
我也想自动将ModifiedBy 属性设置为当前用户。这样做的最佳方法是什么?框架中是否有一些内置的东西可以让我访问这些信息,或者我是否需要设置类似DateProvider 类的东西?这是一个 Active Directory 环境,我们在 IIS 中使用WindowsAuthentication。
这是我的 SaveChanges 代码:
public override int SaveChanges()
{
var changeSet = ChangeTracker.Entries<IAuditable>();
if (changeSet != null)
{
foreach (var entry in changeSet.Where(c => c.State != EntityState.Unchanged))
{
entry.Entity.ModifiedDate = DateProvider.GetCurrentDate();
}
}
return base.SaveChanges();
}
【问题讨论】:
标签: c# asp.net-mvc-3 entity-framework-4.1 ef-code-first