Вы также можете использовать LINQ для NHibernate, обычно это облегчает понимание запросов, чем API QueryOver.
Судя по комментариям, вам нужна функция со следующей подписью:
public Vehicle GetVehicle(VehicleRegistrant registrant)
{
var vehicle = session.Query<Vehicle>()
.FetchMany(x => x.VehicleRegistrants)
.ThenFetch(x => x.Owner)
.Where(x => x.VehicleRegistrants.Contains(registrant))
.SingleOrDefault();
}
Или, если у вас есть отношение в направлении от VehicleRegistrant
к его родителю Vehicle
, это также будет работать
public Vehicle GetVehicle(VehicleRegistrant registrant)
{
var vehicle = session.Query<Vehicle>()
.FetchMany(x => x.VehicleRegistrants)
.ThenFetch(x => x.Owner)
.Where(x => x == registrant.Vehicle)
.SingleOrDefault();
}
Я не уверен, что это именно то, что вы хотели, но я верю, что вы поняли идею. FetchMany(x => x.VehicleRegistrants)
указывает NHibernate также извлечь все VehicleRegistrants
для каждого Vehicle
в наборе результатов, а следующие ThenFetch(x => x.Owner)
говорит "и для каждого из этих VehicleRegistrants
также извлечь его Owner
".
Помогает ли это?