NHibernate ВНИМАНИЕ и данные не сохраняются - PullRequest
3 голосов
/ 26 января 2011

Пока я сохраняю, вызывая SaveOrUpdate (), я получил это предупреждение и данные не сохраняются в базе данных после вызова Transaction.Commit ().

NHibernate.Engine.ForeignKeys - Невозможно определить, если [название проекта] назначенный идентификатор [primarykey] переходный или отстраненный; запрашивая база данных. Используйте явный Save () или Обновление () в сеансе, чтобы предотвратить это.

Я вставляю новый объект. Поиск Google говорит мне, чтобы вызвать Save () вместо SaveOrUpdate (): означает, что Save () только для вставки.

Я ищу в Google и не вижу много об этом. Может ли кто-нибудь дать мне предложение по этой проблеме или это предупреждение?

Edit: Вот файлы с образцами смоделированных образцов -

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly=""
                   namespace="">
    <class name="Customer" table="[dbo].[Customer]" optimistic-lock="none" >
        <id name="CustomerId" column="CustomerId" >
            <generator class="assigned"/>
        </id>
        <property name="Name" column="Name" /> 
        <property name="Age" column="Age" /> 
        <set name="CustomerDetails" cascade="none" inverse="true" fetch="select">
            <key>
                <column name="CustomerId"/>
            </key>
            <one-to-many class="CustomerDetail"/>
        </set> 
        <many-to-one name="MGender" fetch="select" cascade="none">
            <column name="GenderCode"/>
        </many-to-one> 
    </class>
</hibernate-mapping>

<class name="CustomerDetails" table="[dbo].[CustomerDetail]" optimistic-lock="none" >
    <id name="CustomerDetailId" column="CustomerDetailId" >
        <generator class="assigned"/>
    </id>
    <property name="Detail1" column="Detail1" /> 
    <many-to-one name="Customer" fetch="select" cascade="none">
        <column name="CustomerId"/>
    </many-to-one> 
</class>

<class name="MGender" table="[dbo].[MGender]" optimistic-lock="none" >
    <id name="GenderCode" column="GenderCode" >
        <generator class="assigned"/>
    </id>
    <property name="Description" column="Description" /> 
    <set name="Customers" cascade="none" inverse="true" fetch="select">
        <key>
            <column name="GenderCode"/>
        </key>
        <one-to-many class="Customer"/>
    </set> 
</class>

Ответы [ 2 ]

6 голосов
/ 26 января 2011

Вы используете назначенный идентификатор, поэтому вам нужно установить атрибут unsaved-value, чтобы NHibernate мог определить, следует ли вставлять или обновлять объект.Или вы можете явно вызвать Save для новых объектов.

    <id name="CustomerId" column="CustomerId" unsaved-value="???" >
        <generator class="assigned"/>
    </id>
0 голосов
/ 06 марта 2013

Обратите внимание, что если вы используете пользовательский идентификатор, то есть не используете Id (x => x.Id) .GeneratedBy.Assigned () и у вас нет столбцов версии или метки времени, NHibernate не знаетесли это новый ряд или существующий.Итак, я исправил свою проблему с помощью GeneratedBy.UuidString ().Работает как шарм.С этим сообщением об ошибке чуть не запустил мой код, к счастью, моя информация была сохранена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...