Свободный NHibernate HasMany в компоненте - PullRequest
1 голос
/ 22 мая 2009

Ниже приведена модель класса и схема Oracle, которую я хотел бы сопоставить с использованием Fluent NHibernate.

public enum EnumA { Type1, Type2, Type3 };
public class ClassB
{
    public virtual string Property1 { get; set; }
    public virtual string Property2 { get; set; }
}

public class ClassA
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
    public virtual IDictionary<EnumA, IList<ClassB>> MyDictionary { get; set; }
}

Таблица A (НОМЕР (38) ID PK, VARCHAR2 (255) Имя)
Таблица B (НОМЕР (38) ID PK FK, НОМЕР (38) Тип PK, VARCHAR (255) Prop1, VARCHAR (255) Prop2)

Как определить класс отображения Fluent NHibernate?
Я не против ввести новый класс домена, если это необходимо. Я пробовал следующее:

public class ClassB
{
    public virtual string Property1 { get; set; }
    public virtual string Property2 { get; set; }
}

public class classC
{
    public virtual EnumA EnumA { get; set; }
    IList<ClassB> ClassBList { get; set; }
}

public class ClassA
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
    public virtual IDictionary<EnumA, classC> MyDictionary { get; set; }
}

со следующим классом отображения

    public ClassAMap()
    {
        WithTable("ClassA");
        Id(x => x.ID);
        Map(x => x.Name);

        HasMany(x => x.MyDictionary).AsMap<EnumA>(d => d.EnumA).Component(c =>
        {
            c.HasMany(e => e.ClassBList).Component(f =>
                {
                    f.Map(x => x.Property1);
                    f.Map(x => x.Property1);
                });
        });
    }

Однако это не создает действительную конфигурацию. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 23 мая 2009

Класс B не является компонентом A, это связанный объект со своим собственным идентификатором (ID, Type), поэтому он не может быть логически компонентом, поскольку компоненты не имеют своего собственного идентификатора (PK), иначе они будут отдельные лица.

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