在日志记录中获取TEntity类型

时间:2018-08-18 23:22:41

标签: c# .net entity-framework entity-framework-6

我正在C#中使用Entity Framework 6,并实现了自己的DatabaseLogFormatter类,以便能够格式化日志中的内容。

我想向日志中添加执行SQL的TEntity对象类型的更多细节(使用过程DbSqlQuery<TEntity> SqlQuery(string sql, params object[] parameters))。因此,如果我有一个名为staff并被称为staff.SqlQuery的实体,那么我可以在LogCommand()中找出调用SQL的是staff。然后,我可以在日志Entity "staff" executed the command...

中添加一行

1 个答案:

答案 0 :(得分:0)

输入到目前为止您已有的代码。从示例过程尚不清楚,因为它不是扩展方法。猜测是否要针对CREATE INDEX [IX_Composite] ON [ReportIndex] ([lprOwner], [lprArchived], [lprPendingDate], [lprDone], [lprDate]); ...

运行的扩展方法
DbSet<TEntity>

调用代码类似于:

public static class DbSetExtensions
{
   public static DbSqlQuery<TEntity> SqlQuery<TEntity>(this DbSet<TEntity> dbSet, string sql, params object[] parameters) where TEntity : class
   {
      // Do stuff with dbSet...
      Logger.Instance.Write(string.Replace("Entity \"{0}\" executed the command...", typeof(TEntity).Name));
   }
}

作为静态方法,要访问记录器,您需要将其解析为静态类或静态Singleton。或者,仅提取DbSet的名称以在非静态存储库方法等中使用:

using( var context = new myDbContext())
{
   var query = context.Orders.SqlQuery(sql);
   // ...
   var results = query.ToList();
}

尽管没有代码,但是很难猜出您打算如何使用SqlQuery方法...