Fluent nhibernate Fluent NHibernate有许多内部组件

Fluent nhibernate Fluent NHibernate有许多内部组件,fluent-nhibernate,dictionary,Fluent Nhibernate,Dictionary,下面是一个类模型和一个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

下面是一个类模型和一个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,VARCHAR2255名称 表B编号38 ID PK FK,编号38类型PK,VARCHAR255 Prop1,VARCHAR255 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);
                });
        });
    }

但是,这不会生成有效的配置。有人能帮忙吗?

类B不是a的组件,它是一个具有自己标识ID的相关实体,因此它在逻辑上不能是一个组件,因为组件没有自己的标识PK,否则它们将是单独的实体

我不确定这是否直接适用,但请看我的答案: