我们正在尝试使用 Nhibernate 未来查询来预先加载一些数据。正如您在调用 ToList() 时已经知道的那样,我们之前拥有的所有未来查询都将在一个事务中执行。
var selectedPhysicianIds = new List<int> {1, 2};
var query = this.physicianReviewQuery.Clone()
.TransformUsing(new DistinctRootEntityResultTransformer())
.AndRestrictionOn(p => p.Id)
.IsIn(selectedPhysicianIds)
.Future();
var collectionsQuery = this.session.QueryOver<Physician>()
.AndRestrictionOn(p => p.Id)
.IsIn(selectedPhysicianIds);
collectionsQuery.Clone().Fetch(p => p.Specialties).Eager.Future();
collectionsQuery.Clone().Fetch(p => p.HospitalPhysicianBridges).Eager.Future();
collectionsQuery.Clone().Fetch(p => p.SpecialtyPhysicianBridges).Eager.Future();
selectedPhysicians.AddRange(query.ToList());
此代码将生成以下查询集,
Select * from PhysicianReview where PhysicianKey in (@p0, @p1)
Select * from Physician P left outer join Specialties S on P.Specialty = S.Specialty
Where P.PhysicianKey in (@p2, @p3)
Select * from Physician P left outer join HospitalBridge HB on P.Physician = HB.Physician
Where PhysicianKey in (@p4, @p5)
Select * from Physician P left outer join SpecialtyBridge SB on P.Physican = SB.Physician
Where PhysicianKey in (@p6, @p7)
',N'@p0 int,@p1 int,@p2 int,@p3 int,@p4 int,@p5 int,@p6 int,@p7 int,
@p0=1,@p1=2,@p2=1,@p3=2,@p4=1,@p5=2,@p6=1,@p7=2
在查看 sql 查询时,相同数量的参数值将应用于具有不同参数名称的所有查询。
假设selectedPhysicianIds
包含 1000 个整数的数组(用户可以选择他们想要的任何东西)。
var selectedPhysicianIds = new List<int> {1, 2,....998, 999, 1000};
在这种情况下,相同数量的参数值将应用于所有四个未来查询。所以参数总数将是(4 * 1000)4000。但是我们在sql server中有以下限制。“传入的请求参数太多,服务器最多支持2100个参数”
有没有办法在 Nhibernate 的帮助下解决这个问题?