質問

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

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

Fluent Mappingのサンプル:

        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();

ユニットテストでは、エンティティがキャッシュされ、後続の取得で同じエンティティが返されることが明確に示されていますが、永続ストアから読み込まれたオブジェクトは不変になります。

ありがとう!

役に立ちましたか?

解決

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top