2012-07-17 89 views
10

根据Service Stack Ormlite documentation。我应该在调试模式下生成sql查询。但是,我无法看到这些查询。简单代码ServiceStack OrmLite查询日志记录

private static readonly string DataDirLoc = 
     Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + 
     "\\TargetIntegration\\Test\\Debug\\"; 



    private readonly string dbFileName = DataDirLoc + 
               "Test.db3"; 

    [Test] 
    public void Can_Generate_log() { 
     //var writer = new TextWriterTraceListener(System.Console.Out); 
     //Debug.Listeners.Add(writer); 
     Debug.Write("this is a try"); 
     var dbFact = new OrmLiteConnectionFactory("Data Source={0};Version=3;".FormatParams(dbFileName), true, 
                SqliteOrmLiteDialectProvider.Instance); 
      IDbConnection dbConnection = dbFact.OpenDbConnection(); 
     var dbCommand = dbConnection.CreateCommand(); 
     dbCommand.CreateTable<Contact>(); 
    } 

回答

15

您需要OrmLite的调试版本来查看SQL输出。 有一对夫妇的其他方式,你可以查看最近的SQL:

Console.WriteLine(dbCmd.GetLastSql()); 

您也可以分析通过设置连接过滤器,它可以用做数据库连接:

var dbFact = new OrmLiteConnectionFactory(
    "Data Source={0};Version=3;".Fmt(dbFileName), true, 
    SqliteOrmLiteDialectProvider.Instance) { 
    ConnectionFilter = x => new ProfiledDbConnection(x, Profiler.Current) 
}; 

其中如果你在ServiceStack中运行这个命令会让你看到所有SQL语句的配置时序输出。下面是一个例子:

https://gist.github.com/1787443

+0

谢谢德米斯。但是,我在Windows应用程序中使用ORMlite。我不认为我可以使用MVC迷你探查器。可能是我错了。请指导。 – Mohit 2012-07-17 21:53:07

+0

并且默认情况下dbCommand上没有扩展方法“GetLastSql()”,我可以使用“CommandText”。但它只给出了最后执行的声明。 – Mohit 2012-07-17 21:58:40

+1

那么如果你托管一个ServiceStack自托管的HttpListener服务,你可以:)但WinApp中的web服务器似乎有点沉重的调试。您也可以创建自己的ProfiledDbConnection,并让它将所有SQL记录到控制台。这里是src https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/MiniProfiler/Data/ProfiledDbConnection.cs – mythz 2012-07-17 22:10:43