c# - 在日志记录中获取 TEntity 类型
问题描述
我在 C# 中使用 Entity Framework 6 并实现了我自己的类,DatabaseLogFormatter
以便能够格式化来自日志的内容。
我想在日志中添加更多详细信息,即执行 SQL 的 TEntity 对象类型(使用这些过程DbSqlQuery<TEntity> SqlQuery(string sql, params object[] parameters)
)。因此,如果我有一个实体命名staff
并调用staff.SqlQuery
我可以在LogCommand()
拉出它是staff
调用 SQL。然后我可以在我的日志中加入一行Entity "staff" executed the command...
解决方案
为您到目前为止所拥有的内容提供一些代码。鉴于它不是扩展方法,因此从示例过程中不清楚。猜测一下,如果您想要一个针对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));
}
}
调用代码将类似于:
using( var context = new myDbContext())
{
var query = context.Orders.SqlQuery(sql);
// ...
var results = query.ToList();
}
作为静态方法,要访问记录器,您需要将其解析为静态类或静态单例。或者,仅提取 DbSet 的名称以用于非静态存储库方法等:
public static class DbSetExtensions
{
public static string EntityName<TEntity>(this DbSet<TEntity> dbSet) where TEntity : class
{
return typeof(TEntity).Name;
}
}
尽管没有代码,但很难猜测您打算如何使用 SqlQuery 方法...
推荐阅读
- javascript - onClick 反应通知未显示,但它运行该功能
- nginx - NGINX 反向代理重写 SAML 回调
- azure - Kubernetes Zookeeper 集群设置/配置 YAML
- java - 如何打印/显示 MathML 表达式?
- javascript - 如何使用jquery css框架在jquery ui中的非活动选项卡的鼠标悬停时获取背景颜色?
- google-analytics - Google 分析上的推荐渠道上缺少某些 URL
- c# - System.InvalidOperationException: '在意外的时间调用了一个方法。(来自 HRESULT 的异常:0x8000000E)'
- javascript - 如何读取当前活动用户的 firebase 数据?
- javascript - 如何从数组中生成连续的数字
- bash - 如何根据bash中的日期对数据进行排序?