字典的FluentNHibernate映射

Cha*_*dam 3 nhibernate fluent

使用Fluent NHibernate映射简单Dictionary属性的最佳方法是什么?

JD *_*toy 6

使用简单的类关系,如下所示:

public class Foo {
    public virtual IDictionary<string, Bar> Bars { get; set; }
}

public class Bar {
    public virtual string Type { get; set; }
    public virtual int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你可以用这种方式用Fluent NHibernate映射它:

mapping.HasMany(x => x.Bars)
       .AsMap(x => x.Type);
Run Code Online (Sandbox Code Playgroud)

哪里Bar.Type用作字典中的关键字段.


Cra*_*ell 6

public class PersistedData 
{
    public virtual IDictionary<key, value> Dictionary { get; set; }
}

public class PersistedDataMap : ClassMap<PersistedData>
{
    HasMany(x => x.Dictionary)
            .Table("dict_table")
            .KeyColumn("column_id")
            .AsMap<string>("key")
            .Element("value");
}
Run Code Online (Sandbox Code Playgroud)

这将正确映射Dictionary到表dict_table并用于column_id将其与基本ID相关联.

作为旁注,如果您想在字典中使用Enum作为Key,则应注意NHibernate.Type.EnumStringType<MyEnum>可以.AsMap<string>使用字符串来代替字符串而不是Ordinal.