我试图将(通过代码)受保护的集合映射到包,但我正在努力。 e.g。
public class MyClass
{
....
protected virtual ICollection<Items> MyItems { get; set; }
....
}
public class MyClassMapping : ClassMapping<MyClass>
{
...
Bag(x => x.MyItems, map =>
{
....
}
...
}
抛出一个映射异常,内部异常为&#34; ArgumentNullException:Value不能为null。参数名称:localMember&#34;。如果&#34; MyItems&#34;它可以正常工作。收集是公开的。
我遵循了这篇文章(https://groups.google.com/forum/#!topic/nhusers/wiH1DPGOhgU),它建议使用带有字符串的方法重载。 e.g。
public class MyClassMapping : ClassMapping<MyClass>
{
...
Bag("MyItems", map =>
{
....
}
...
}
但是这会产生编译错误&#34;方法的类型参数....不能从用法中推断出来。尝试明确指定类型参数&#34;。
是否可以映射到受保护的集合(我使用的是NH 3.3)?有人可以举个例子吗?
谢谢, 切特
答案 0 :(得分:0)
我们可以在这里看到重载的方法:PropertyContainerCustomizer.cs
public void Bag<TElement>(string notVisiblePropertyOrFieldName
, Action<IBagPropertiesMapper<TEntity, TElement>> collectionMapping
, Action<ICollectionElementRelation<TElement>> mapping)
{ ... }
我们必须传递的通用模板是TElement
,用作ICollection<TElement>
。
因为定义是:
// TElement is Items
protected virtual ICollection<Items> MyItems { get; set; }
解决方案:我们要做的就是像这样声明映射
// the TElement must be expressed explicitly as Items
Bag<Items>("MyItems", map =>
{
....
}