使用流畅的nhibernate自动映射IDictionary

我有一个看起来像这样的简单类:

public class Item { // some properties public virtual IDictionary Details { get; private set; } } 

然后我有一个看起来像这样的地图:

 map.HasMany(x => x.Details).AsMap("Name").AsIndexedCollection("Name", c => c.GetIndexMapping()).Cascade.All().KeyColumn("Item_Id")) 

有了这张地图我得到以下错误,我不知道如何解决它?

类型或方法有2个通用参数,但提供了1个通用参数。 必须为每个通用参数提供通用参数。

我找到了解决方法。 基本上我阻止了自动播放器尝试映射IDictionary。 它迫使我必须在覆盖中手动映射它,但至少它可以工作。

我正在使用从DefaultAutomappingConfiguration派生的AutomappingConfiguration。

 public override bool ShouldMap(Member member) { if ( member.PropertyType.IsGenericType ) { if (member.PropertyType.GetGenericTypeDefinition() == typeof(System.Collections.Generic.IDictionary<,>)) return false; } return base.ShouldMap(member); } 

这里有几个示例类以及我用来实现这一目的的相关映射:

 public class ComponentA { public virtual string Name { get; set; } } public class EntityF : Entity { private IDictionary _components = new Dictionary(); public IDictionary Components { get { return _components; } set { _components = value; } } } public class EntityFMap : IAutoMappingOverride { public void Override(AutoMapping mapping) { mapping.HasMany(x => x.Components) .AsMap("IndexKey") .KeyColumn("EntityF_Id") .Table("EntityF_Components") .Component(x => { x.Map(c => c.Name); }) .Cascade.AllDeleteOrphan(); } } 

我刚刚花了几个小时来完成这项工作,所以我希望这可以节省别人一个晚上的拉毛。