0

キャッシュしたい非常に単純なCountryエンティティがあります。これは完全に機能しますが、開発者がインスタンスの状態を変更できないように、キャッシュされたインスタンスのクローンバージョンを返すか、読み取り専用にする必要があります。

どうすればこれを達成できますか?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();

私の単体テストは、エンティティがキャッシュされ、同じエンティティが後続の取得で返されることを明確に示していますが、永続ストアからロードされたオブジェクトは不変である必要があります。

ありがとう!

4

1 に答える 1

3

クラスのインスタンスを (オブジェクト インスタンスを変更できないという意味で) 不変にしたい場合は、それに従ってクラスを記述する必要があります。NHib や Fluent NHib とは関係ありません。例として、NHib をプライベート フィールドまたはプライベート プロパティ セッターにマップし、プロパティ ゲッターのみをパブリックに公開します。

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

于 2009-03-16T21:30:54.930 に答える