2009-03-28 9 views
0

わかりました、簡単な質問.. :)複数の候補キーを持つエンティティをNHibernateにロードしていますか?

私のwebportalでは、明らかにログオンする必要があるユーザーがいます。今のPhoneNumber

- GUID - - ユーザーID

  • CK - nvarchar型 - メール
  • CK - nvarchar型

    • PK:

      私は、MSSQL-DBのユーザーとテーブルを持ってユーザーは電話番号または電子メールのいずれかを使用して自分のサイトにログオンできるようにしたいので、電話番号または電子メールのどちらかを使用してユーザーをフェッチする必要があります(両方とも一意にする必要があります)。

      NHibernateでは、ISessionはプライマリキー(私の場合は基本的にサロゲートキーです)を使ってエンティティをロードすることしかできません。候補キーを使用してエンティティをロードする方法はありますか?

      私はデータベース設計に非常に錆びてるので、これは貧しいデザインかもしれないが、私は本当にそれがこのような仕組みを持っている、やや一般的だと思う - しかし、それが悪いデザインであれば、私に知らせてください:)

      事前に

      おかげで

  • 答えて

    2

    はNHibernateはを使用していないが、Javaでは、いくつかの簡単なHQLでセッション::のexecuteQueryを使用すると、正しいオブジェクトを取得します。最初に、私はHibernateの "Session"がNHibernateの "Session"に等価であると仮定します。第二に、私はHQLが両方とも同じであると仮定します。それらの両方に該当する場合は、おそらくのようなものを使用したい:

    user = isession.executeQuery('from Users where Email = ?'); 
    

    または

    user = isession.executeQuery('from Users where PhoneNumber = ?'); 
    

    を私はNHibernateのに働いていないので、ここでも、構文に多少の違いがあるかもしれません。それが役に立てば幸い!

    +0

    それは基本的に私が自分で見つけたものです。 Hibernateは本当にHibernateの柔軟性を向上させます - 今まで私がそれを見つけられなかったとは信じられません:)ありがとう – cwap

    0

    私のああ...誰もが同じ問題に遭遇した場合にそれをここに投稿の答えを自分自身:)

    を発見しました。

    NHibernate CriteriasまたはNQLが必要です。ここで必要な情報を見つけました: http://www.beansoftware.com/asp.net-tutorials/nhibernate-log4net.aspx

    - 「クエリと基準」 - スクロールして約4/5を下にします。

    (Imはここで情報を引用することができ思いませんので、私は良くないでください)

    関連する問題