NHibernate bycode映射到受保护的集合

时间:2014-05-09 08:48:44

标签: nhibernate mapping nhibernate-mapping protected mapping-by-code

我试图将(通过代码)受保护的集合映射到包,但我正在努力。 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)?有人可以举个例子吗?

谢谢, 切特

1 个答案:

答案 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 =>
{
    ....
}