使用流畅的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(); } }
我刚刚花了几个小时来完成这项工作,所以我希望这可以节省别人一个晚上的拉毛。