我正在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...
答案 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方法...