C# NHibernate如何在更复杂的查询中使用ToFuture
我有以下数据模型 我想从数据库中检索一个客户端及其整个组织结构,使用nHibernate Future 我试过这样的方法:C# NHibernate如何在更复杂的查询中使用ToFuture,c#,nhibernate,linq-to-nhibernate,C#,Nhibernate,Linq To Nhibernate,我有以下数据模型 我想从数据库中检索一个客户端及其整个组织结构,使用nHibernate Future 我试过这样的方法: public DBClient GetOrganizationStructure(long clientOid) { var f0 = Query().Fetch(x => x.RegisteredAddress).Fetch(x => x.BillingAddress).Fetch(x => x.RegisteredOff
public DBClient GetOrganizationStructure(long clientOid)
{
var f0 = Query().Fetch(x => x.RegisteredAddress).Fetch(x => x.BillingAddress).Fetch(x => x.RegisteredOffices).Where(x=>x.Oid == clientOid).ToFuture();
var f1 = Session.Query<DBRegisteredOffice>().Fetch(x => x.DeliveryAddress).Where(x => x.Client.Oid == clientOid).ToFuture();
var f2 = Session.Query<DBDepartment>().Fetch(x => x.Workplaces).Where(x => x.RegisteredOffice.Client.Oid == clientOid).ToFuture();
var f3 = Session.Query<DBWorkplace>().Fetch(x => x.Expertise).Where(x => x.RegisteredOffice.Client.Oid == clientOid || x.Department.RegisteredOffice.Client.Oid == clientOid).ToFuture();
var v = f0.ToList();
return v.First();
}
不那么冗长:
DBRegisteredOffice registeredOfficeAlias = null;
DBClient clientAlias = null;
DBDepartment departmentAlias = null;
var query = Session.QueryOver(() => clientAlias)
.Fetch(x => x.RegisteredAddress).Eager
.Fetch(x => x.BillingAddress).Eager
.Left.JoinAlias(x => x.RegisteredOffices, () => registeredOfficeAlias)
.Where(x => x.Oid == clientOid)
.Future();
Session.QueryOver(() => registeredOfficeAlias)
.Fetch(x => x.DeliveryAddress).Eager
.Fetch(x => x.Workplaces).Eager
.Where(x => x.Client.Oid == clientOid)
.Future();
Session.QueryOver(() => registeredOfficeAlias)
.Left.JoinAlias(x => x.Departments, () => departmentAlias)
.Where(x => x.Client.Oid == clientOid)
.Future();
Session.QueryOver(() => departmentAlias)
.Fetch(x => x.Workplaces).Eager
.JoinQueryOver(x => x.RegisteredOffice).Where(x => x.Client.Oid == clientOid)
.Future();
return query.First();
DBRegisteredOffice registeredOfficeAlias = null;
DBClient clientAlias = null;
DBDepartment departmentAlias = null;
var query = Session.QueryOver(() => clientAlias)
.Fetch(x => x.RegisteredAddress).Eager
.Fetch(x => x.BillingAddress).Eager
.Left.JoinAlias(x => x.RegisteredOffices, () => registeredOfficeAlias)
.Where(x => x.Oid == clientOid)
.Future();
Session.QueryOver(() => registeredOfficeAlias)
.Fetch(x => x.DeliveryAddress).Eager
.Fetch(x => x.Workplaces).Eager
.Where(x => x.Client.Oid == clientOid)
.Future();
Session.QueryOver(() => registeredOfficeAlias)
.Left.JoinAlias(x => x.Departments, () => departmentAlias)
.Where(x => x.Client.Oid == clientOid)
.Future();
Session.QueryOver(() => departmentAlias)
.Fetch(x => x.Workplaces).Eager
.JoinQueryOver(x => x.RegisteredOffice).Where(x => x.Client.Oid == clientOid)
.Future();
return query.First();