首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate AssertException: Interceptor.OnPrepareStatement( SqlString )返回null或空SqlString

NHibernate AssertException: Interceptor.OnPrepareStatement( SqlString )返回null或空SqlString
EN

Stack Overflow用户
提问于 2010-12-23 02:13:38
回答 2查看 6K关注 0票数 9

我正在尝试将表从多对一映射转换为具有中间映射表的多对多。但是,当我切换它并尝试用NHibernate对它进行查询时,它给出了这个错误:"Interceptor.OnPrepareStatement(SqlString) returned null or empty SqlString“。

我的查询最初是更复杂的查询,但我将其切换为基本的fetch all,并且仍然存在问题:

代码语言:javascript
复制
Session.QueryOver<T>().Future();

这似乎要么是我的模型映射文件中的问题,要么是我的数据库中的什么问题。

以下是我的模型映射:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="GBI.Core" namespace="GBI.Core.Models">

<class name="Market" table="gbi_Market">
    <id name="Id" column="MarketId">
        <generator class="identity" />
    </id>
    <property name="Name" />
    <property name="Url" />
    <property name="Description" type="StringClob" />
    <property name="Rating" />
    <property name="RatingComment" />
    <property name="RatingCommentedOn" />
    <many-to-one name="RatingCommentedBy" column="RatingCommentedBy" lazy="proxy"></many-to-one>
    <property name="ImageFilename" />
    <property name="CreatedOn" />
    <property name="ModifiedOn" />
    <property name="IsDeleted" />

    <many-to-one name="CreatedBy" column="CreatedBy" lazy="proxy"></many-to-one>
    <many-to-one name="ModifiedBy" column="ModifiedBy" lazy="proxy"></many-to-one>

    <set name="Content" where="IsDeleted=0 and ParentContentId is NULL" order-by="Ordering asc, CreatedOn asc, Name asc" lazy="extra">
        <key column="MarketId" />
        <one-to-many class="MarketContent" />
    </set>

    <set name="FastFacts" where="IsDeleted=0" order-by="Ordering asc, CreatedOn asc, Name asc" lazy="extra">
        <key column="MarketId" />
        <one-to-many class="MarketFastFact" />
    </set>

    <set name="NewsItems" table="gbi_NewsItem_Market_Map" lazy="true">
        <key column="MarketId" />
        <many-to-many class="NewsItem" fetch="join" column="NewsItemId" where="IsDeleted=0"/>
    </set>

    <!--<set name="MarketUpdates" table="gbi_Market_MarketUpdate_Map" lazy="extra">
        <key column="MarketId" />
        <many-to-many class="MarketUpdate" fetch="join" column="MarketUpdateId" where="IsDeleted=0" order-by="CreatedOn desc" />
    </set>-->

    <set name="Documents" table="gbi_Market_Document_Map" lazy="true">
        <key column="MarketId" />
        <many-to-many class="Document" fetch="join" column="DocumentId" where="IsDeleted=0"/>
    </set>
</class>

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="GBI.Core" namespace="GBI.Core.Models">

<class name="MarketUpdate" table="gbi_MarketUpdate">
    <id name="Id" column="MarketUpdateId">
        <generator class="identity" />
    </id>
    <property name="Description" />
    <property name="CreatedOn" />
    <property name="ModifiedOn" />
    <property name="IsDeleted" />

    <!--<many-to-one name="Market" column="MarketId" lazy="proxy"></many-to-one>-->

    <set name="Comments" where="IsDeleted=0" order-by="CreatedOn desc" lazy="extra">
        <key column="MarketUpdateId" />
        <one-to-many class="MarketUpdateComment" />
    </set>

    <many-to-one name="CreatedBy" column="CreatedBy" lazy="proxy"></many-to-one>
    <many-to-one name="ModifiedBy" column="ModifiedBy" lazy="proxy"></many-to-one>
</class>

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="GBI.Core" namespace="GBI.Core.Models">

<class name="MarketUpdateMarketMap" table="gbi_Market_MarketUpdate_Map">
    <id name="Id" column="MarketUpdateMarketMapId">
        <generator class="identity" />
    </id>
    <property name="CreatedOn" />
    <property name="ModifiedOn" />
    <property name="IsDeleted" />

    <many-to-one name="CreatedBy" column="CreatedBy" lazy="proxy"></many-to-one>
    <many-to-one name="ModifiedBy" column="ModifiedBy" lazy="proxy"></many-to-one>

    <many-to-one name="MarketUpdate" column="MarketUpdateId" lazy="proxy"></many-to-one>
    <many-to-one name="Market" column="MarketId" lazy="proxy"></many-to-one>
</class>

正如我提到的,MarketUpdate最初与市场是多对一的(MarketId专栏仍然在那里,但我忽略了它。这会是一个问题吗?)。但我已经在Market_MarketUpdate_Map表中添加了,以使其成为多对多。

我在绕圈子想弄清楚这可能是什么。在搜索时,我找不到任何关于此错误的引用。而且它没有提供太多细节。

使用:

NHibernate 2.2

.NET 4.0

SQL Server 2005

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-23 05:54:23

问题在于,在visual studio中,xml映射文件被设置为内容,而不是嵌入的资源。改变它解决了我所有的问题。

票数 17
EN

Stack Overflow用户

发布于 2014-01-14 23:17:33

如果您使用Fluent而不是xml进行映射,并遇到此问题,请尝试删除%root%\LocalCache\NHibernate中生成的xml文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4512252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档