2
假设我有以下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的生成SQL查询与Bar表的内部联接,然后它是Bar表Id的where子句。我怀疑这是否确保bar.id = 5是一个有效的酒吧ID?
我的问题是我如何告诉NHibernate让我单独查询foo表对foo.foobarid列。事情是这样的:
SELECT f.id, f.prop1 FROM foo f WHERE f.foobarid = 5
谢谢你提前为任何见解,您可以提供!
谢谢你的回复!它非常完美!希望后来的NH-Linq版本可以使用这种优化,但现在这对我来说很有用。 – NYCChris