2009-07-06 5 views
2

私は何とかNHibernateにインターフェイスIListの代わりにList型のプロパティに私の1対多の関係をマップするように指示できますか?NHibernateにリスト<T>と1対多の関係をマッピングさせ、IListではなく<T>にする方法を教えてください。

私はNHibernateが独自のIList実装を遅延ロードに使用していることを知っていますが、この機能は必要ありません。代わりに、私は具体的なListクラスの代わりにIListインターフェイスを使用して達成できない、シリアライズ可能なクラスが必要です。

答えて

1

単純な答えはいいえ、NHibernateにList<T>を使用するように指示することはできません。このearlier questionでは詳細に説明しています。

best article NHibernateオブジェクトをシリアライズすると、WCFユーザ​​ーをターゲットにしていることがわかります。

0

これを本当に行う必要がある場合は、唯一の現実的な選択肢は、シリアル化戦略を変更することです。

標準のシリアル化属性ではなく、System.Runtime.SerializationでDataContract属性を使用できます。これにより、インターフェイスのシリアル化がサポートされます。

あなたは、あなたがあなたがシリアライズされることを望んで値を保存するための別のプロパティを使用することができますし、単にシリアライズでそれを取り込む標準のシリアル化を使用する必要がある場合:

//NHibernate property 
public virtual IList<Entity> Entities 
{ 
    get; 
    set; 
} 

//Serialized property 
public List<Entity> SerializedEntities 
{ 
    get; 
    set; 
} 

[OnSerializing] 
void DoStuff(StreamingContext context) 
{ 
    SerializedEntities = // Whatever you want to serialize... 
} 
関連する問題