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_sql
和 format_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>
我们将不胜感激任何建议。非常感谢。
更新
作为对 cmets 的回应,我添加了 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 属性(不是那个)漂亮的打印的主要内容,如果未能解决你的问题,请参考以下文章