2011-01-29 4 views
2

最近NHの最新バージョンであるNHibernate 2.1から3.0にWebアプリケーションをアップグレードすることにしました。また、Monoとの互換性を最大限にするために.NET 2.0から3.5にアップグレードすることを決定しました(webappはLinuxのみで動作します)。NHibernate 3.0とLINQ:何が欠けていますか?

私はNHibernate.Linq名前空間がリリースに含まれていることも知っていたので、LINQとNHibernateでちょっと遊んでみたかったのです。

ただし、ISessionインスタンスを使用してLINQを書き込もうとすると、Linq<T>メソッドが取得されません。

私は多くを読んだ古い LINQをNHに使用するには、NHContribパッケージを使用する必要がありますブログ記事。

私の質問は

である私はまだNHContribをダウンロードする必要がありますか? NHのバージョン3.0 NHにNHContribのLINQよりもはるかに多く、最近であり、私は、LINQの名前空間がリリースに

あるいは、

を含め見たことが原因2.0-> 3.5フレームワークのアップグレードを使用してVisual Studio 2010にアップグレードすることです?私はダブルチェックし、ターゲットフレームワークは3.5です。

残念ながら、私は

ありがとう汎用開発よりもNH開発者にとってより有用である完全なクラスのドキュメントを除き、NH 3.0の包括的なドキュメントを見つけることができません。

答えて

7

NHibernateの3.0は、それが内蔵独自のLINQプロバイダBのしている、あなたは.Query < T経由でアクセスすることができます>

だから、もうAyendeのNHibernate.Linqプロバイダを必要としません。

さらに、NHibernate 3.0 Cookbookがあなたを助けるかもしれません。

https://www.packtpub.com/nhibernate-3-0-cookbook/book

0

はまた作り付けのLINQプロバイダはWhere句で.Equals方法をsupprortていないことに注意して、あなたの代わりに==を使用する必要があります。 2倍にNHibernate.Linqで動作するように使用される次のインスタンスの場合:

(from e in myEntities where e.Name.Equals(nameLookup) select e) 

あなたは今

(from e in myEntities where e.Name == nameLookup select e) 
+0

を行う必要がありますが、より良い説明できますか?私はオブジェクト間の値比較を実行する必要があります:あなたの例はおそらく==と比較できる文字列を表示しますが、私のオブジェクトは主キーの比較を実行するためにオーバーロードされたEquals()メソッドを持っています。オブジェクト全体ではなくプライマリキーを明示的に比較する必要がありますか?例(e.Boss.Equals(me)がeを選択する従業員のeから)、ここでBossはPerson型ですが、どうすればよいですか? –

+0

私たちもやっているので、 '=='演算子を使うだけです: 'e.Boss == meはeを選択します。 ' –

+0

(私たちのすべてのものは、私たちが持っていた3.0への移行の一環として' .Equals'クエリを '=='に更新すると、以前と同じように動作します) –

関連する問題