2009-03-16 12 views
0

私はキャッシュしたい非常に簡単なCountryエンティティを持っています。これは完全に機能しますが、キャッシュされたインスタンスのクローンバージョンを返すか、または開発者がその状態を変更できないように読み取り専用にする必要があります。流暢なマッピングとSyscache2の第2レベルキャッシングを使用するNHibernate

これをどのように達成できますか?私はFluent Readonly()メソッドがこれを強制することを約束しましたが、そうではありません。

サンプル流暢マッピング:

 Id(x => x.Id); 
     Map(x => x.Name).WithLengthOf(50).Not.Nullable().Unique(); 
     Map(x => x.IsoCode).WithLengthOf(10).Not.Nullable().Unique(); 
     HasMany(x => x.States).Cascade.None().LazyLoad();   
     Cache.AsReadOnly(); 

私のユニットテストは明らかに実体がキャッシュされていることを示し、同じエンティティが、その後に返されることになりますが、私はそれが永続からロードされています一度オブジェクトは不変になりたいです格納。

ありがとうございます!

答えて

3

あなたのクラスのインスタンスを(オブジェクトインスタンスを変更することは不可能であるという意味で)不変にしたい場合は、NHibまたはFluent NHibとは関係なくクラスを書く必要があります。たとえば、NHibをプライベートフィールドまたはプライベートプロパティセッターにマップし、プロパティゲッターを公開するだけです。

NHibでは、クラスマッピングに「mutable = false」を指定することができます(FNHでこれを行う方法はわかりません)。これは実行時にオブジェクトを不変にしませんが、これらのエンティティに対する挿入、更新、削除をチェックしないようにNHibに通知します。

関連する問題