Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF5的日志/审计跟踪_C#_Sql_Asp.net Mvc 4_Entity Framework 5 - Fatal编程技术网

C# EF5的日志/审计跟踪

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)只有一个字符串连接,只

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

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

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

那么,使用EF创建日志的好方法是什么呢?有没有一种方法可以使用触发器来完成它?(并传递userID和其他?)


我一直在读关于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();
}