2

私は現在、初めて Fluent NHibernate とともに NHibernate を使用しています。すべてがうまくセットアップされましたが、実際にデータの取得を行うようになりましたが、不十分なようです。

次のようなことができるように、NHibernate を期待していました。

session.CreateCriteria<TblDocket>()
    .Add(Restrictions.Eq(x=> x.DocketNumber, "10101"));

しかし、これは事実ではないようであり、私は書く必要があるようです:

session.CreateCriteria<TblDocket>()
    .Add(Restrictions.Eq("DocketNumber", "10101"));

プロパティの名前を変更するとき、それは素晴らしいことではありません! 特に文字列がプロパティ名に関連している場合は特に、コード内のハードコーディングされた文字列は悪いと常に考えてきました。

これらの制限を強く入力する方法はありますか? このブログ投稿を見ましたが、かなり面倒です。もっと良い解決策はありますか?

4

4 に答える 4

2

代わりにNHibernate.Linqを使用することにしました。ここで素晴らしいチュートリアルを見つけました。

于 2010-07-28T09:53:51.453 に答える
1

すぐに使用できる NHibernate を使用することはできません。NHibernate Lambda Extensionsと呼ばれるプロジェクトがあり、いくつかの制限付きでこれを行うことができます。

于 2010-07-28T08:37:46.233 に答える
1

NHibernate 3.0 以降ではQueryOver、クライテリア API の優れたタイプセーフ ラッパーも利用できます。

session.QueryOver<TblDocket>()
    .Where(x => x.DocketNumber, "10101");
于 2012-04-10T10:14:35.513 に答える
0

この投稿に参加していて、linqが好きではない、またはラムダにあまり詳しくない人は、次のようなICriertaを安全に使用できます。

session.CreateCriteria<TblDocket>().Add(Restrictions.Eq("DocketNumber", "10101"));

必要なのはヘルパークラスです。これにより、「DocketNumber」などの魔法の文字列を削除して、プロパティ名や列名を変更した場合にこれらが処理されるか、少なくともビルドエラーが発生するため、公開する前に確認できます。あなたのコード。例を見たい人は誰でもNhGen(http://sourceforge.net/projects/nhgen/ )とhttps://sourceforge.net/projects/nhgen/forums/forum/1169117/topicのクエリ例を見ることができます。 / 3789112は、ヘルパークラスをどのように使用できるかを示しています。

// Find using a simple entity query 
IList<IMessage> messageList3 = messageDao.Find( new [] { Restrictions.Le(MessageHelper.Columns.Date, dateLastChecked) } ); 

このプロジェクトでは、すべての一般的なCRUDメソッドを1つのクラス(上記のxxxDao)にグループ化するエンティティラッパークラスも作成されているため、同じコードを何度もコピーし続ける必要はありません。

于 2010-07-29T22:12:50.870 に答える