NHibernate 的 format_sql 属性(不是那个)漂亮的打印

Posted

技术标签:

【中文标题】NHibernate 的 format_sql 属性(不是那个)漂亮的打印【英文标题】:NHibernate's format_sql property (not that) pretty printing 【发布时间】:2011-08-30 23:49:06 【问题描述】:

将以下输出与我在 Stack Overflow 和互联网上看到的示例进行比较让我想知道我做错了什么,因为显然 show_sqlformat_sql 属性设置正确?

输出

NHibernate:
    SELECT
        book0_.Isbn as Isbn0_0_,
        book0_.Title as Title0_0_,
        book0_.Author as Author0_0_,
        book0_.Publisher as Publisher0_0_,
        book0_.Published as Published0_0_,
        book0_.Pages as Pages0_0_,
        book0_.InStock as InStock0_0_,
        book0_.Description as Descript8_0_0_
    FROM
        Books book0_
    WHERE
        book0_.Isbn=@p0;
    @p0 = '0596800959' [Type: String (0)]

Book.cs

public class Book

    public string Isbn  get; set; 
    public string Title  get; set; 
    public string Author  get; set; 
    public string Publisher  get; set; 
    public DateTime Published  get; set; 
    public int? Pages  get; set; 
    public bool InStock  get; set; 
    public string Description  get; set; 

Book.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Dotnet.Samples.NHibernate"
                   namespace="Dotnet.Samples.NHibernate">
  <class name="Book" table="Books" lazy="false">
    <id name="Isbn" />
    <property name="Title" />
    <property name="Author" />
    <property name="Publisher" />
    <property name="Published" />
    <property name="Pages" />
    <property name="InStock" />
    <property name="Description" />
  </class>
</hibernate-mapping>

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property>
    <property name="connection.connection_string">Data Source=res/Catalog.sdf</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
  </session-factory>
</hibernate-configuration>

我们将不胜感激任何建议。非常感谢。

更新

作为对 cme​​ts 的回应,我添加了 expected 输出的样子(基本上是一个有效的 SQL 语句):

NHibernate:
    SELECT
        Isbn,
        Title,
        Author,
        Publisher,
        Published,
        Pages,
        InStock,
        Description
    FROM
        Books
    WHERE
        Isbn = '0596800959'

【问题讨论】:

您希望能够将查询从日志/控制台等复制并粘贴到 SQL Server Management Studio 之类的东西中,并在不进行任何修改的情况下运行查询?基本上你想要一个来自 nhibernate 的 SQL 的可执行版本? 确实我的意思是我过于雄心勃勃(如果您将属性命名为“show_sql”或“format_sql”)期望输出在某种程度上符合常规 SQL?我没有理由不期待。 好吧,我猜它基本上确实符合常规 SQL。您唯一需要做的就是进行一些编辑以标记变量或使用 @P0 值显式设置 where 过滤器。我同意尽管如此,如果您在插入语句中有大量变量,那将是一种痛苦,特别是。您可以尝试的一种商业产品是nhprof.com,它将为您完成您所追求的。 我明白你的意思 - 可惜没有办法提示 POCO 类(可能通过属性,例如[DataContract])关于这些别名。 【参考方案1】:

您使用的是最新版本的 NHibernate 吗?这是原来的task。此博客暗示它仅在3.0 中受支持。

【讨论】:

我目前使用的是 3.1.0.4000 版本 - 不确定这是否是最新版本,但似乎足够新鲜。 你看到任何输出了吗? 感谢 Dmitry 的贡献,尽管我不太了解您的问题 - 输出始终与上述程序集版本的原始帖子中显示的相同。 请提供链接或使用预期格式更新问题。

以上是关于NHibernate 的 format_sql 属性(不是那个)漂亮的打印的主要内容,如果未能解决你的问题,请参考以下文章

MVC OnResultExecuting 性能问题

NHibernate之旅系列文章导航

NHibernate教程(19) —— 一级缓存

Nhibernate学习教程-- 第一个NHibernate程序

Nhibernate学习教程-- 开篇有益

NHibernate 2 + Fluent Nhibernate 中等信任