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.PersistentGenericBag1 1[Domain.Model.Foo]' to type 'Domain.Model.MyList[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

が具体的なタイプである場合 MyList<T>(そして私が正しく覚えている場合)、NHibernateは、取得したものと同様の(または同じ?)例外で文句を言います。

代わりにを使用することで解決できIList<T>ます。

于 2012-06-19T14:49:13.963 に答える
0

これはうまくいくはずです...

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

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

マップされたプロパティをに変更し、IListに設定しましたMyList

于 2012-06-19T15:36:55.470 に答える