Свободный NHibnernate HasManyToMany с индексом - PullRequest
2 голосов
/ 14 марта 2009

Я пытаюсь отобразить коллекцию «многие ко многим» с помощью Fluent NHibnernate. У моего модельного класса есть это свойство:

public virtual IList<Resource> Screenshots
{
    get { return _screenshots; }
    protected set { _screenshots = value; }
}

И мое беглое отображение:

HasManyToMany(x => x.Screenshots)
                .AsList(x => x.WithColumn("Index"))
                .Cascade.AllDeleteOrphan();

Когда я запускаю свое приложение, я получаю следующее сообщение об исключении:

Элемент 'list' в пространстве имен 'urn: nhibernate-mapping-2.2' имеет недопустимый дочерний элемент «многие ко многим» в пространстве имен 'Урна: NHibernate-отображение-2,2'. Список ожидаемые возможные элементы: 'индекс, list-index 'в пространстве имен 'Урна: NHibernate-отображение-2,2'

.

Должен быть способ сделать это. Кто-нибудь знает, что я делаю не так?

1 Ответ

3 голосов
/ 07 мая 2011

Текущий синтаксис FluentNHibernate для этого выглядит следующим образом:

HasManyToMany(x => x.Screenshots)
    .AsList(i => i.Column("`Index`"));

По умолчанию для столбца индекса задано значение Индекс, но это зарезервированное слово в SQL Server (и, возможно, в других базах данных), поэтому вы должны заключить его в кавычки.

Кроме того, я бы рекомендовал не устанавливать каскад этих отношений. Рассмотрим следующий код:

x.Screenshots.Remove(s);
session.SaveOrUpdate(x);

NHibernate правильно удалит строки из таблицы ссылок даже без указания каскада. Однако, если вы укажете AllDeleteOrphan, NHibernate удалит строку из таблицы ссылок, а также удалит Resource s. Я сомневаюсь, что вы хотите именно такого поведения в отношениях «многие ко многим».

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