我有一个看起来像这样的简单类:
public class Item {
// some properties
public virtual IDictionary<string, Detail> Details { get; private set; }
}
然后我有一张如下所示的地图:
map.HasMany(x => x.Details).AsMap<string>("Name").AsIndexedCollection<string>("Name", c => c.GetIndexMapping()).Cascade.All().KeyColumn("Item_Id"))
使用此地图我收到以下错误,我不知道如何解决它?
类型或方法有2个通用参数,但提供了1个通用参数。必须为每个通用参数提供通用参数。
答案 0 :(得分: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<string, ComponentA> _components = new Dictionary<string, ComponentA>();
public IDictionary<string, ComponentA> Components
{
get { return _components; }
set { _components = value; }
}
}
public class EntityFMap : IAutoMappingOverride<EntityF>
{
public void Override(AutoMapping<EntityF> mapping)
{
mapping.HasMany<ComponentA>(x => x.Components)
.AsMap<string>("IndexKey")
.KeyColumn("EntityF_Id")
.Table("EntityF_Components")
.Component(x =>
{
x.Map(c => c.Name);
})
.Cascade.AllDeleteOrphan();
}
}
我刚刚花了几个小时才完成这项工作,所以我希望这可以节省其他人一个晚上的拉头。