【问题标题】:How to log subsonic3 sql如何记录 subsonic3 sql
【发布时间】:2010-05-17 10:17:09
【问题描述】:

我开始基于 subsonic3(用于查询)和 log4net(用于日志)开发一个新的 asp.net 应用程序,并且想知道如何将 subsonic3 与 log4net 接口,以便 log4net 记录 subsonic 使用的底层 sql。

这是我目前所拥有的:

public static IEnumerable<arma_ocorrencium> ListArmasOcorrencia()
    {
        if (logger.IsInfoEnabled)
        {
            logger.Info("ListarArmasOcorrencia: start");
        }

        var db = new BdvdDB();
        var select = from p in db.arma_ocorrencia
                              select p;

        var results = select.ToList<arma_ocorrencium>(); //Execute the query here

        if (logger.IsInfoEnabled)
        {
            // log sql here
        }


        if (logger.IsInfoEnabled)
        {
            logger.Info("ListarArmasOcorrencia: end");
        }

        return results;
    }

【问题讨论】:

    标签: sql log4net subsonic3 logging


    【解决方案1】:

    可以使用Provider类的Log属性:

    _db.Provider.Log = Console.Out;
    

    会将您的 SQL 语句记录到控制台。如果你想使用 log4net 或类似的东西,你必须编写一个小的中介类来实现 TextWriter 并将所有接收到的输入重定向到 log4net。

    【讨论】:

      【解决方案2】:

      可以这样获取生成的sql:

      string sql = select.GetQueryText();
      

      确保您使用的是 3.0.0.4 或更高版本。

      干杯

      【讨论】:

      • 我收到此错误,是的,我使用的是 3.0.0.4:System.Linq.IQueryable' 不包含 'GetQueryText' 的定义并且没有扩展方法'可以找到接受“System.Linq.IQueryable”类型的第一个参数的 GetQueryText(您是否缺少 using 指令或程序集引用?)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多