私は次の2つのエンティティを持っているとしましょう。私はこのようなクエリを記述する際このNHibernate 3.2 linqクエリを最適化する方法
public class Foo {
public virtual int Id {get;set;}
public virtual int Version {get;set;}
public virtual string SomeProp {get;set;}
public virtual Bar Bar {get;set;}
}
public class Bar {
public virtual int Id {get;set;}
public virtual int Version {get;set;}
public virtual string Name {get; set;}
}
//Fluent Mappings
public class FooMapping :ClassMap<Foo>
{
public FooMapping()
{
Id (f => f.Id).GeneratedBy.Identity();
Version(f => f.Version);
Map(f=> f.SomeProp).Column("fooprop1");
References(f => f.Bar).Column("foobarid").Not.Null();
}
}
public class BarMapping :ClassMap<Bar>
{
public BarMapping()
{
Id (b => b.Id).GeneratedBy.Identity();
Version(b => b.Version);
Map(b => b.name).Column("barname");
}
}
(私は不眠症のビットであることとし、メモリからこれを入力しています、任意のコードのタイプミスを許してください):
var query = from f in Session.Query<Foo>()
where f.Bar.Id == 5
select new {f.Id, f.SomeProp};
私はNHibernateのが発生していることに気づきますBarテーブルへの内部結合を持つsqlクエリを実行し、BarテーブルのIdにwhere句を指定します。 bar.id = 5が有効なバーIDであることを確認するためにこれが行われていると思われますか?
私の質問は、foo.foobaridカラムに対してfooテーブルだけを問い合わせるようにNHibernateに指示する方法です。このような何か:
SELECT f.id, f.prop1 FROM foo f WHERE f.foobarid = 5
あなたが提供することができます任意の洞察力のために事前にありがとうございます!
ありがとうございました!それは完璧に働いた!うまくいけば、NH-Linqの後のバージョンでこの最適化が使用されることを期待していますが、これは私のために今働いています。 – NYCChris