NHibernate でデータベースへのラウンドリップなしで、定義済みのルックアップをいくつか使用したいと考えています。
基本的には、次のようなコードが必要です。
public class Countries
{
static Countries() {
Australia = new Country
{
Id = 14,
Description = "Australia"
}
}
public static Country Austrlia { get; protected set }
}
次に、このコード スニペットを記述します。
address.Country = Countries.Australia;// Snippet1
if (address.Country == Countries.Australia) { // Snippet2
// Do something
}
そのため、Equals、GetHashCode をオーバーライドし、Country クラス ルックアップの演算子 == と != をオーバーロードします。
Snippet1 は、指定された ID を持つ国がメモリに読み込まれていない場合にのみ機能します。それ以外の場合は、指定された ID を持つオブジェクトが既にメモリ内にあることを示す NonUniqueObjectException がスローされます。
これを回避するには、読み込まれた国を立ち退かせてから、ルックアップ値を割り当てる必要があります。これは間違っているように感じます。Country ルックアップのクエリが再度実行されたときに何が起こるかわかりません。
問題は、NHibernate で静的ルックアップ クラスを維持する方法です。
ありがとう、ドミトリー。