Свободное владение NHibernate HasManyToMany и NotFound

У меня есть следующий фрагмент отображения FNH:

HasManyToMany((c) => c.Plaintiffs)
    .LazyLoad()
    .WithTableName("invoicePlantiff")
    .WithChildKeyColumn("PersonReferenceID")
    .WithParentKeyColumn("invoiceID")
    .FetchType.Join();

Что дает следующий HBM:

<bag name="Plaintiffs" access="iServe.Design.CslaNHibernate.CslaChildPropertyAccessor, iServe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" lazy="true" table="invoicePlantiff">
  <key column="invoiceID" />
  <many-to-many column="PersonReferenceID" class="iServe.PersonReference, iServe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" fetch="join" />
</bag>

Проблема в том, что я имею дело с устаревшими данными, то есть, позвольте нам просто сказать «не идеально», а некоторые записи имеют недопустимые идентификаторы, поэтому мне нужно поместить атрибут not-found="ignore" в тег «многие ко многим» внутри пакета. Я не вижу НИКАКОГО способа добиться этого с помощью FNH.

.NotFound.Ignore() на вызове References(), но не на вызове HasManyToMany.

Может кто-нибудь сказать мне, что мне не хватает? Даже если это хитрость для «внедрения» атрибута после его рендеринга / перед настройкой NH - все в порядке, мне просто нужно, чтобы он работал.

Заранее спасибо.

ОБНОВЛЕНИЕ ответа gcores не сработает, он добавляет его не в тот тег, см. мой комментарий к его ответу для получения дополнительной информации.


person Andrew Burns    schedule 11.03.2009    source источник


Ответы (2)


Я только что внес изменение, которое добавляет NotFound к вызовам HasMany и HasManyToMany. Надеюсь, поможет!

person James Gregory    schedule 14.03.2009

Я не уверен в этом, но разве нет SetAttribute?

HasManyToMany((c) => c.Plaintiffs)
.LazyLoad()
.WithTableName("invoicePlantiff")
.WithChildKeyColumn("PersonReferenceID")
.WithParentKeyColumn("invoiceID")
.FetchType.Join()
.SetAttributte("not-found", "ignore");

ОБНОВЛЕНИЕ:

Извините за это, я знал, что существует SetAttribute, но не был уверен, что он сделал то, что вы хотели.

Другой вариант - смешать сопоставления Fluent NH и XML, вики-сайте Fluent NH объясняется, как это сделать или можете увидеть этот ответ из stackoverflow.

person gcores    schedule 11.03.2009
comment
На самом деле gcores, который не работает, потому что он добавил атрибут в bag, и это недопустимо. Он должен пойти на many-to-many внутри сумки. - person Andrew Burns; 12.03.2009