Объект Nhibernate с несколькими списками Many-Many того же типа?

Делает кто-либо знает, как я отобразил бы объект с двумя many-many наборами того же дочернего типа.

Моя структура базы данных - это....

"Нормальные" отношения будут....

tbl_Parent
  col_Parent_ID

tbl_Parent_Child_Xref
   col_Parent_ID
   col_Child_ID

tbl_Child
   col_Child_ID

Альтернативные отношения...

tbl_Parent
  col_Parent_ID

tbl_Include_ParentChild_Xref
   col_Parent_ID
   col_Child_ID

tbl_Child
   col_Child_ID

Объект и отображение похожи на это...

public partial class ParentEntity : AuditableDataEntity<ParentEntity>
{
  public virtual IList<ChildEntity> Children { get; set; }
  public virtual IList<ChildEntity> IncludedChildren { get; set; }
}

public partial class ParentMap : IAutoMappingOverride<ParentEntity>
{
    public void Override(AutoMapping<ParentEntity> mapping)
    {
        mapping.Table("tbl_Parent");

        mapping.HasManyToMany(x => x.Children)
        .Table("tbl_Parent_Child_Xref")
        .ParentKeyColumn("col_Parent_ID")
        .ChildKeyColumn("col_Child_ID")
        .Inverse()
        .Cascade.All();

        mapping.HasManyToMany(x => x.IncludedChildren)
        .Table("tbl_Include_ParentChild_Xref")
        .ParentKeyColumn("col_Parent_ID")
        .ChildKeyColumn("col_Child_ID")
        .Inverse()
        .Cascade.All();
    }
}

Ошибкой, которую я получаю, является "Система. NotSupportedException: не Может выяснить, какова другая сторона many-many свойства 'Children' должна быть".

Я использую NHibernate 2.1.2, FluentNhibernate 1.0.

7
задан Damien B 7 January 2010 в 22:23
поделиться

4 ответа

Вы знаете, я просто снимаю здесь в темноте, но это почти звучит так, как будто ваш класс ChildEntity не известен Hibernate ... обычно именно здесь я видел сообщения такого рода. Hibernate проверяет ваш класс и видит этот класс, на который указывает ссылка (в данном случае - ChildEntity), о котором id не знает.

Возможно, вы перешли дальше и обнаружили проблему на этом этапе, но думали, что все равно увижу.

0
ответ дан 8 December 2019 в 01:59
поделиться

К моей великой жалости, NHibernate не может этого сделать. Подумайте об использовании другого ORM.

-4
ответ дан 8 December 2019 в 01:59
поделиться

Fluent запутался, потому что вы дважды ссылаетесь на один и тот же родительский столбец. Это запрещено. И, насколько я могу судить по активности, которую я видел, исправление не появится в ближайшее время.

Вам придется написать несколько пользовательских расширений, чтобы заставить это работать, если это возможно.

0
ответ дан 8 December 2019 в 01:59
поделиться

Похоже, что FNH сбит с толку, потому что вы, кажется, сопоставляете один и тот же объект (ChildEntity) двум разным таблицам, если я не ошибаюсь.

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

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

IList<ChildEntity> ChildEntities
IList<IncludedChildEntity> IncludedChildEntities

И оба ваших класса объектов будут идентичными.

Если вы говорите, что это работает с NH, то это может быть ошибка, как уже говорилось. Однако вы можете смешивать как сопоставления XML, так и автоматическое сопоставление с FNH. Так что, если это действительно работает в NH, возможно, это будет моим предпочтением. Но думаю, это обходное решение должно сработать.

1
ответ дан 8 December 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: