EF5上的logg / audit trail

时间:2013-10-29 19:51:34

标签: c# sql asp.net-mvc-4 entity-framework-5

我正在寻找一种在EF5数据库上首先执行日志更改/审计跟踪的好方法。

我遇到的主要问题是当前旧的应用程序正在破坏,它使用触发器创建日志,但在该应用程序上,数据库连接使用应用程序上每个用户的特定用户(应用程序上的每个用户都有他的自己的数据库用户),所以当他们做日志他们使用很多连接属性作为默认值,如userID和Host,也许多记录表没有userID行,所以如果我使用EF,我想要的实体update / insert / delete没有任何用户数据。

但我的应用程序(MVC4)只有1个字符串连接,只使用1个用户(每个用户使用相同的数据库用户),因此触发器将从连接字符串中存储数据库用户的userId。

那么使用EF创建日志的好方法是什么?有没有办法使用触发器?(并传递userID和其他?)。

我正在阅读有关覆盖onUpdate函数的内容,但他们也说它不适用于EF5

1 个答案:

答案 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();
}