如何映射复杂的IDictionary <protectiongroupidentifier,hashset <vmidentifier =“”>&gt; </protectiongroupidentifier,>

时间:2012-09-11 08:00:47

标签: fluent-nhibernate nhibernate-mapping

我需要使用Fluent NHibernate映射以下属性(Foo中的Vms):

public class Foo
{
    [DataMember]
    public IDictionary<VpgId, HashSet<VmId>> Vms 
    { get;  private set; }
}

public class VpgId
{
    [DataMember]
    public virtual Guid GroupGuid 
    { get; private set; }
}

public class VmId
{
    [DataMember]
    public virtual string VmName
    { get; private set; }

}

我尝试将HashSet更改为ISet并添加以下FNH配置

.Override<Foo>(obj => obj.HasMany(x => x.Vms ).Cascade.AllDeleteOrphan())

但我得到以下例外:

  

抛出异常。 NHibernate.MappingException:NHibernate.MappingException:关联引用未映射的类:System.Collections.Generic.ISet`1 [[Common.VmId,Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]。

问:如何映射集合中包含的集合?

1 个答案:

答案 0 :(得分:1)

您无法映射嵌套集合。您需要创建一个包含内部集合的类(需要是一个ISet)。然后,您可以将其映射为复合元素。