将用户名存储到Entity Framework 4.1中的CreatedBy或UpdatedBy DB列

时间:2014-04-24 10:04:06

标签: asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4.1

我正在使用MVC3,C#,Razor,EF4.1(MS SQL2008(dev)和SQL Azure(Test,Live))。

我想在某些表中添加“CreatedBy”和“UpdatedBy”列,并使用应用程序“principal”用户名作为这些列的值。我正在使用会员服务。我已经使用触发器实现了“CreatedOn”和“UpdatedOn”列。我不能对“CreatedBy”和“UpdatedBy”列做同样的事情,因为数据库不知道应用程序用户名。您是否可以在MVC应用程序中提供方法/代码示例,这不需要我在更新实体的所有位置编写更新代码。我可能正在考虑对“SaveChanges()”进行扩展。

我确实知道这个问题与变更跟踪有关,而EF4.1内置了审计功能。然而,这是不同的,它将所有更改写入审计表,这可能是好的,但在我的情况下,在记录上也有用户名数据也会有所帮助。这有用的一个领域是当一个人在DB之间进行数据比较时,一个人希望避免其他人添加或更新的记录。对于纯粹的审计,我可能会在将来添加EF4.1的更改跟踪功能。

提前致谢。

编辑:

是否有任何可以插入此代码的事件,例如“onSaving”或等效代码?

1 个答案:

答案 0 :(得分:2)

为此目的使用ObjectContext.SavingChanges事件。 处理正在保存的实体

context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)

并设置CreatedByUpdatedBy列值。

http://msdn.microsoft.com/en-us/library/cc716714.aspx

如果您使用的是DbContext,请使用以下代码从中检索ObjectContext

var adapter = (IObjectContextAdapter)dbContext;
var objectContext = adapter.ObjectContext;