Свободный компонент NHibernate HasMany

Ниже представлена ​​модель класса и схема 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; }
}

TableA (NUMBER (38) ID PK, VARCHAR2 (255) Name)
TableB (NUMBER (38) ID PK FK, NUMBER (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);
                });
        });
    }

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


person Community    schedule 22.05.2009    source источник
comment
Я не уверен, что это применимо напрямую, но см. Мой ответ здесь: stackoverflow.com/questions/1875466/   -  person Chris Stavropoulos    schedule 11.05.2010


Ответы (1)


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

person Frans Bouma    schedule 23.05.2009