C# EF5的日志/审计跟踪
我正在寻找一种很好的方法,首先在EF5数据库上执行日志更改/审计跟踪 我遇到的主要问题是,当前一个旧的应用程序正在破坏,它使用触发器创建日志,但在该应用程序上,数据库连接为应用程序上的每个用户使用一个特定的用户(应用程序上的每个用户都有自己的数据库用户),所以,当他们做一个日志时,他们会使用很多连接属性作为默认值,比如userID和Host,还有许多记录的表并没有userID行,所以如果我使用EF,我想要更新/插入/删除的实体并没有任何用户数据 但是我的应用程序(MVC4)只有一个字符串连接,只使用一个用户(每个用户使用相同的数据库用户),因此触发器将存储连接字符串中数据库用户的用户ID 那么,使用EF创建日志的好方法是什么呢?有没有一种方法可以使用触发器来完成它?(并传递userID和其他?)C# EF5的日志/审计跟踪,c#,sql,asp.net-mvc-4,entity-framework-5,C#,Sql,Asp.net Mvc 4,Entity Framework 5,我正在寻找一种很好的方法,首先在EF5数据库上执行日志更改/审计跟踪 我遇到的主要问题是,当前一个旧的应用程序正在破坏,它使用触发器创建日志,但在该应用程序上,数据库连接为应用程序上的每个用户使用一个特定的用户(应用程序上的每个用户都有自己的数据库用户),所以,当他们做一个日志时,他们会使用很多连接属性作为默认值,比如userID和Host,还有许多记录的表并没有userID行,所以如果我使用EF,我想要更新/插入/删除的实体并没有任何用户数据 但是我的应用程序(MVC4)只有一个字符串连接,只
我一直在读关于override onUpdate函数的书,但他们也说它在EF5上不起作用。在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();
}
在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();
}