1

我有一个带有自定义列表的类,它继承自 List 并且无法使 NHibernate 映射工作。

public class MyClass
{
  private MyList<Foo> foos;

  public virtual MyList<Foo> Foos
  {
      get { return foos; }
      set { foos= value; }
  }
}

<bag name="Foos" access="property" cascade="all-delete-orphan" batch-size="5">
      <key column="MyClassId"/>
      <one-to-many class="Domain.Model.MyClass, Domain"/>
</bag>

我得到了例外

无法转换类型为“NHibernate.Collection.Generic.PersistentGenericBag 1[Domain.Model.Foo]' to type 'Domain.Model.MyList1[Domain.Model.Foo]”的对象。

在这个博客之后,我尝试将包包在一个组件中,

<component name="Foos" access="nosetter.camelcase-underscore">
  <bag name="Foos" access="property" cascade="all-delete-orphan" batch-size="5">
      <key column="MyClassId"/>
      <one-to-many class="Domain.Model.MyClass, Domain"/>
  </bag>
</component>

导致错误

在“Domain.Model.MyList`1[Domain.Model.Foo]”类中找不到属性“Foos”的吸气剂

MyList 只有一个添加对象的方法。

public class MyList<T> : List<T>
{
    public new void Add(T item)
    {
        //custom stuff

        base.Add(item);
    }
}
4

2 回答 2

0

这应该工作...

public class MyClass
{
    public virtual IList<Foo> Foos { get; private set; }

    public MyClass()
    {
        Foos = new MyList<Foo>();
    }
}

将映射属性更改为 anIList并将其设置为MyList

于 2012-06-19T15:36:55.470 回答
0

如果 MyList<T>是一个具体类型(如果我没记错的话)NHibernate 会抱怨一个类似于(或相同?)你得到的异常。

这可以通过使用IList<T>来解决。

于 2012-06-19T14:49:13.963 回答