0

「Equals」を使用して、DB の値と別の指定された値が同じかどうかを確認したいと思います。残念ながら、 NHbernateは「Equals」をサポートする継ぎ目がないため、インターネットで検索したところ、次のチュートリアルが見つかりました。
最後に、拡張機能を登録する必要がありますが、どのファイルで登録すればよいでしょうか?

編集
私の問題をもう少し詳しく説明する必要があるかもしれません...
状況:「GoodsType」と呼ばれる列挙があります。可能な値は、たとえば「Iron」、「Wood」、「Stone」などです。この列挙型は、クラス「InventoryGoods」で使用されます。

public class InventoryGoods: Goods
{
    public virtual User Owner { get; set; }
    public virtual Guid Id { get; set; }
    public virtual long Amount { get; set; }
    public virtual GoodsType GoodsType { get; set; }
    public virtual float Price { get; set; }
}

ユーザーが何かを売りたい場合、その特定の商品を十分に持っているかどうかを確認する必要があります。このチェック用の関数を作成しました。この関数はそれ自体で実際の所有者 (ログインしているユーザー) を見つけることができるため、GoodsType と Amount を送信するだけで済みます。しかし、この request: を使用すると、スクリプトはエラーSystem.NotSupportedException: Boolean Equals(System.Object, System.Object) でInventoryGoods good = _repository.First(x => (Equals(x.GoodsType, GivenGoodsType)) && (x.Amount >= GivenAmount));停止します

私はたくさん検索しましたが、SO のどこか (残念ながらリンクを覚えていません) で、"Equals" は NHibernate でサポートされていない (SQL に変換できないため) というステートメントを見つけました。そこで、解決策を探したところ、上記のチュートリアルが見つかりました。しかし、拡張機能を登録する必要があるファイルが見つかりません。

私はすでにこの解決策を見つけました: InventoryGoods good = _repository.First(x => x.Amount >= GivenAmount).Where(x => (Equals(x.GoodsType, GivenGoodsType)));、しかし、「最初」のみで、「どこ」を介して再確認せずに方法を好むでしょう。

編集 2
マッピングに Fluent NHibernate を使用しています。

4

1 に答える 1

0

私の知る限り、NHibernate はオブジェクト比較のために Equals をサポートしています。実際、デフォルトがオブジェクト値ではなくメモリアドレスの実装リレーに等しい限り、それをオーバーライドする必要があります。

この同様の質問を参照してください: Equals メソッドがオーバーライドされたときに GetHashCode をオーバーライドすることが重要なのはなぜですか?

NHibernate: Equals と GetHashCode をオーバーライドする理由

于 2012-05-28T16:22:38.853 に答える