小编mud*_*ess的帖子

实体框架记录重复项

我们正在运行Entity Framework 6并且有一个DatabaseLogFormatter来格式化我们的数据,它通过NLog AsyncTargetWrapper记录到一个文件中.该应用程序是一个MVC5 Web应用程序.

DatabaseLogFormatter主要是空的存根,LogCommand和LogResult除外.两者都正确地格式化数据.到目前为止,NLog日志记录一直没有问题.

我们遇到的问题是,经过几个小时的正常运行时间(似乎是随机的,无法找到模式),它将创建几乎重复的日志行.一旦启动它继续记录每一行两次或三次.有时它会随机返回一行.

行将在DatabaseLogFormatter中读取的时间不同,这意味着请求正在重新格式化(而不是NLog问题).

public class NLogFormatter : DatabaseLogFormatter
{
    private static readonly DbType[] StringTypes = { DbType.String, DbType.StringFixedLength, DbType.AnsiString, DbType.AnsiStringFixedLength, DbType.Date, DbType.DateTime, DbType.DateTime2, DbType.Time, DbType.Guid, DbType.Xml};

    public NLogFormatter(DbContext context, Action<string> writeAction)
        : base(context, writeAction)
    {
    }

    public override void LogCommand<TResult>(
        DbCommand command, DbCommandInterceptionContext<TResult> interceptionContext)
    {

        var builder = new StringBuilder();
        builder.Append($"COMMAND|{(command.CommandType == CommandType.StoredProcedure ? "EXEC " :"")}{command.CommandText.Replace(Environment.NewLine, " ")} ");
        foreach (var parameter in command.Parameters.OfType<DbParameter>())
        {
            builder.Append("@")
                .Append(parameter.ParameterName)
                .Append(" = ")
                .Append(parameter.Value == null || …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework nlog

12
推荐指数
1
解决办法
630
查看次数

标签 统计

c# ×1

entity-framework ×1

nlog ×1