【发布时间】:2014-12-08 22:23:06
【问题描述】:
我的核心项目是用 C# 编写的。
我在一个数据库上工作,其中一些表具有“user_mod”和“date_mod”列,用于标记谁以及何时制作了一些 mod,并且与“data_new”和“user_new”相同。
我的问题:有没有办法集中这个并自动插入这些数据,我在其中创建dbContext 的实例?
如果没有,我将使用审计跟踪工具。我见过其中的一些,但有一个问题:所有这些都需要我的模型中的一些代码。但我不想写在我的模型中,因为如果我必须更改它,我会丢失 mods。是否可以在不写入模型文件的情况下对 EF6 使用审计跟踪?怎么样?
编辑:
我尝试覆盖 saveChanges。
public partial class PieEntities : DbContext
{
public override int SaveChanges(System.Data.Objects.SaveOptions options)
{
var timestamp = DateTime.Now;
EntityState es = EntityState.Added;
ObjectStateManager o = new ObjectStateManager();
foreach (ObjectStateEntry entry in o.GetObjectStateEntries(EntityState.Added )) {
if (entry.Entity.GetType() == typeof(TabImpianti)) {
TabImpianti impianto = entry.Entity as TabImpianti;
impianto.DATA_INS = timestamp;
impianto.DATA_MOD = timestamp;
string u = mdlImpostazioni.p.UserName;
impianto.USER_INS = u;
impianto.USER_MOD = u;
}
}
return base.SaveChanges(options);
}
}
更新:我总结了solution here。
【问题讨论】:
-
Entity Framework DbContext SaveChanges() OriginalValue Incorrect 的可能副本。在这方面还有很多努力。寻找实体框架 + 审计。
-
@GertArnold 为什么?我不这么认为。此外,这个问题是关于 EF4,我的两个旧版本。
-
好吧,当我在 StackOverflow 上搜索这个主题时,我从一长串点击中随机挑选了一个。它通常相当于覆盖
SaveChanges,这在 EF4 中是相同的。在 EF6 中,您可能会在命令树拦截器领域冒险,但我不确定这会将您带到哪里。 -
@PieroAlberto 你的 ObjectStateManager 必须来自上下文:从这个
(this as IObjectContextAdapter).ObjectStateManager分配它 -
关于碱基调用,我不明白它为什么会造成问题。我认为您不需要再次告诉编译器您是从 DbContext 继承的,删除
: DbContext
标签: c# entity-framework entity-framework-6 audit audit-trail