2009-07-30 10 views
1

nHibernateがエラーを出しています。カスタムタイプは、UserCollectionType:myApp.Domain.OrderLineCollectionを実装していません。Fluent nHibernate with BindingList <T>

BindingListはIListを実装しているので、なぜnHibernateはIListではなくUserCollectionTypeを使用しようとしていますか?

public class OrderHeader 
{ 
    public virtual int OrderHeaderId { get; set; } 
    public virtual string OrderNumber { get; set; } 
    public virtual OrderLineCollection Line { get; set; } 
} 

public class OrderLineCollection : BindingList<OrderHeader> { } 

public class OrderHeaderMap : ClassMap<OrderHeader> 
{ 
    public OrderHeaderMap() 
    { 
     WithTable("Orders"); 
     Id(x => x.OrderHeaderId, "OrderId").GeneratedBy.Identity(); 
     Map(x => x.OrderNumber); 
     HasMany(x => x.Line).WithKeyColumn("OrderHeaderId").AsList(); 
    } 
} 

<list name="Line"> 
    <key column="OrderHeaderId" /> 
    <index /> 
    <one-to-many class="myApp.Domain.OrderLine, myApp.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</list> 

答えて

3

NHibernateには、IListの下に実装された独自のカスタム型付きリストがあります。
nHibernate UserTypeを作成しないと、あなたを使用することはできません。

しかし、私は間違っているかもしれないと聞いてうれしいです。 :)

0
FluentNHibernateによって作成されたXMLをチェックしたい場合があります.Lineプロパティの型を明示的に設定することは可能です。

これは、タイプを明示的に設定しない場合に有効です。私はIListから派生したカスタムコレクションを実装しようとしました - そして、マッピングで何がbag/listにタイプを指定しなかったときに機能しました。

[OK]を私はクイックテストを行ったArnis L.が正しい - おそらくUserCollectionTypeを実装しなければ動作しません。私の経験では、実装するのは苦痛です。

(どういうわけか、私はこのような何かをやって思い出したが、私は私に私の心の再生のトリックを推測)

+0

Fluentによって作成されたxmlを表示するように元の質問を修正しました。 FluentはそれをListに設定していますが、なんらかの理由でまだ動作していません。 –

0

私はNHibernateはソースコードを見て、少なくともPersistentBagとPersistentList NHibernateのためのバックエンドとしてArrayListオブジェクトをインスタンス化しますリストではなく、OrderLineCollectionではありません。 IUserColletionTypeを実装するとき、NHibernateにどのコレクションを作成させるべきか、またHibernateが保存するために使用するPersistentコレクションを伝えるメソッドがあります。 this linkをご覧ください。しかし、私はまだBindingListでNhibernateの作業を行うことはできません。