14

私は NHibernate の偉大な世界の初心者です。バージョン 2.0.1.GA を使用しています。これが私の質問です。CarscolumnManufacturer(nvarchar(50))と primary keyを持つテーブルがありますID(int)。私の.NETクラスは次のとおりです。

public class Car
{
    public virtual int ID { get; set; }
    public virtual string Manufacturer { get; set; }
}

メルセデス製のすべての車を取得したい場合は、次のように入力する必要があります。

using (var session = OpenSession())
{
    var cars = session
        .CreateCriteria(typeof(Car))
        .Add(Restrictions.Like("Manufacturer", "Mercedes"))
        .List();
    // ...
}

プロパティ名を文字列として指定する必要があるという事実は好きではありません:(おそらく、よりリファクタリングしやすいものを用意することは可能ですか(それは単なる提案です)?

var ms = session
    .CreateCriteria<Car>()
    .Add(c => c.Manufacturer, Restrictions.Like("Mercedes")
    .List();

現在のバージョン (2.0.1.GA) または将来のバージョンで薄いようなものはありますか?

4

5 に答える 5

9

Google Ninja が言ったように、NHibernate.Linq でそれを行うことができます。クエリは次のようになります。

session.Linq<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()

誰かがここで NH3.0 を使用している場合、構文は少し異なります (Michael Mrozek と Mike の提案に感謝します):

session.Query<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()

2.0GA で動作するfluent-nhibernateにバンドルされているバイナリを使用しました(特定のリビジョンについてはわかりません)。

于 2008-12-04T19:33:56.563 に答える
6

まだ Linq を NHibernate に使用したくない場合は、厳密に型指定された Criteria クエリを取得するための代替手段がいくつかあります。

于 2008-12-07T04:30:24.417 に答える
4

おそらくNHibernate.Linqでこれを行うことができます。使える形ではありますが、まだまだ完成にはほど遠い状態です。現在 nhcontrib 内に存在します。取得する唯一の方法は、ここで svn から引き出すことですhttps://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/

于 2008-12-04T17:14:39.480 に答える
1

こちらの質問をご覧ください。誰かが同じ心配をしていて、私が推測できるように、NHibernate.Linq は健在です。

于 2008-12-06T02:41:15.667 に答える
1

探しているものは、ここ (ブログ エントリ)またはここ (Google リポジトリ) で見つけることができます。

于 2009-07-28T10:07:20.390 に答える