我正在寻找一种在EF5数据库上首先执行日志更改/审计跟踪的好方法。
我遇到的主要问题是当前旧的应用程序正在破坏,它使用触发器创建日志,但在该应用程序上,数据库连接使用应用程序上每个用户的特定用户(应用程序上的每个用户都有他的自己的数据库用户),所以当他们做日志他们使用很多连接属性作为默认值,如userID和Host,也许多记录表没有userID行,所以如果我使用EF,我想要的实体update / insert / delete没有任何用户数据。
但我的应用程序(MVC4)只有1个字符串连接,只使用1个用户(每个用户使用相同的数据库用户),因此触发器将从连接字符串中存储数据库用户的userId。
那么使用EF创建日志的好方法是什么?有没有办法使用触发器?(并传递userID和其他?)。
我正在阅读有关覆盖onUpdate函数的内容,但他们也说它不适用于EF5
答案 0 :(得分:1)
在DatabaseContext中,可以覆盖SaveChanges函数。
您可以测试需要记录的条目的变更集。 也许它是低级的,即接近数据层,但它可以在EF中工作。
你会得到这样的东西:
public override int SaveChanges()
{
foreach (var entry in ChangeTracker.Entries())
{
if (entry.State == EntityState.Added)
{
var needToLogAdd = entry.Entity as INeedToLogAdd;
if (needToLogAdd != null)
DoLogAdd(needToLogAdd);
}
}
base.SaveChanges();
}