使用简单的类关系,如下所示:
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用作字典中的关键字段.
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.