NHibernate AssertException: Interceptor.OnPrepareStatement (SqlString) возвратил нулевой или пустой SqlString - PullRequest
8 голосов
/ 22 декабря 2010

Я пытаюсь переключить таблицу с сопоставления «многие к одному» на «многие ко многим» с промежуточной таблицей сопоставления. Однако, когда я переключил его и попытался выполнить запрос с помощью NHibernate, он выдает мне такую ​​ошибку: «Interceptor.OnPrepareStatement (SqlString) возвратил нулевой или пустой SqlString.»

Мой запрос изначально был чем-то более сложным, но я переключил его на базовую выборку всего, и у меня все еще есть проблема:

Session.QueryOver<T>().Future();

Казалось бы, проблема в файлах сопоставления моделей или в моей базе данных.

Вот мои отображения моделей:

<?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>

<?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>

<?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 изначально был много-к-одному с Market (столбец MarketId все еще там, но я его игнорирую. Может ли это быть проблемой?). Но я добавил в таблицу Market_MarketUpdate_Map, чтобы было много-много.

Я бегаю кругами, пытаясь понять, что это может быть. Я не смог найти ссылку на эту ошибку при поиске. И это не дает много деталей.

Использование:

NHibernate 2.2

.NET 4.0

SQL Server 2005

Ответы [ 2 ]

16 голосов
/ 23 декабря 2010

Оказывается, проблема была в том, что файл отображения xml был задан как контент, а не как встроенный ресурс в Visual Studio.Изменение, которое исправило все мои проблемы.

1 голос
/ 14 января 2014

Если вы используете Fluent вместо xml для сопоставлений и столкнулись с этой проблемой, попробуйте удалить созданные XML-файлы в %root%\LocalCache\NHibernate.

...