Отображение index-свойства не работает - PullRequest
1 голос
/ 06 ноября 2011

У меня есть эта проблема:

Предположим, у меня есть Пользователь, и он является собственностью Карт:

public class User: Entity
{
...
public virtual IList<Card> Cards { get; set; }
...
}

<class name="User" table="Users">
    <id name="Id" column="UserId">
      <generator class="guid"/>
    </id>
    <version name="Version"/>
    ...
    <list name="Cards" cascade="all" inverse="true">
      <key column="ViolatorId" not-null="true"/>
      <index column="CardIndex"/>
      <one-to-many class="Card"/>
    </list>
    ...
</class>

Затем я получаю пользователя из базы данных, добавляю его всписок карточек одной карточки и вызов сеанса. Обновление ().

Сгенерирован этот sql-код:

INSERT INTO Cards
            (Version,
             ViolatorId,
             ModeratorId,
             IssueDate,
             TermDate,
             Cause,
             Type,
             CardId)
VALUES      (1 /* @p0_0 */,
             '6872df65-a1d7-40ef-abec-c14af96f3388' /* @p1_0 */,
             '06060a30-252a-4f29-84fe-af5da110f049' /* @p2_0 */,
             '2011-11-06T17:20:11.00' /* @p3_0 */,
             '2011-11-06T22:20:11.00' /* @p4_0 */,
             'Ad personam' /* @p5_0 */,
             'Red' /* @p6_0 */,
             '0454bbba-5ec9-429f-8830-d9cc33588f7a' /* @p7_0 */)

Проблема в том, что запрос не содержит значение CardIndex, азаполняет его в базе данных как NULL.

Как заставить NHibernate работать правильно?

1 Ответ

0 голосов
/ 06 ноября 2011

Я использовал отображение Fluent NHibernate для определения отображений сущностей.В вашем случае у вас есть отношение «один ко многим» между сущностью «Пользователи» и «Карты».Чтобы каскадное сохранение / обновление / удаление работало должным образом, вам необходимо определить правильные два отображения между двумя объектами.Кроме того, сущность Cards должна иметь ссылку на сущность Users.Обратитесь к следующей ссылке, чтобы узнать, как этот тип отображения определяется (в C #) с помощью Fluent NHibernate:

http://wiki.fluentnhibernate.org/Fluent_mapping#HasMany_.2F_one-to-many http://wiki.fluentnhibernate.org/Fluent_mapping#References_.2F_many-to-one

Хотя код дан в C #, но я предполагаю,Вам не должно быть очень трудно понять, что происходит.

Вы также можете попробовать следующий подход для каскадного сохранения родительских дочерних отношений типа сущностей.

public void Test()
{
    using (IStatelessSession statelessSession = _sessionManager.OpenStatelessSession())
    {
        using (ITransaction transaction = statelessSession.BeginTransaction())
        {
            statelessSession.Insert(<ParentEntity>);
            foreach(var childEntity in ParentEntity)
            {
                statelessSession.Insert(<childEntity>);
            }
            transaction.Commit();
        }       
    }
}

Но опять же, длячтобы это работало правильно, ваше отображение должно быть четко определено.

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