NHibernate родитель-потомок JOIN с ограничением на тип отношений - PullRequest
1 голос
/ 12 сентября 2011

У меня есть юнит класса (например, компании), который имеет много связей с другими юнитами. Я не могу изменить структуру базы данных. БД выглядит примерно так:

Units:
UnitID
UnitName
...

UnitToUnitRelationships:
FromUnitID
ToUnitID
RelationshipType

Мне нужно ограничить RelationshipType при запросе.В настоящее время у меня есть класс Unit с ISet ChildUnits и ISet ParentUnits (поскольку при разных типах отношений у вас могут быть разные родители).У меня нет необходимости в RelationshipType в моем домене;Я был бы заинтересован только одним конкретным типом.Если бы я писал свой собственный SQL, я бы просто удостоверился, что все мои запросы содержали RelationshipType='FOO' в предложении ON или WHERE.

Я использую Fluent для отображения;мое существующее дочернее отображение выглядит следующим образом:

HasManyToMany(x => x.ChildUnits).AsSet().Cascade.None().
 Table("UnitToUnitRelationships").Not.LazyLoad().Fetch.Subselect().
 ParentKeyColumn("ToUnitID").ChildKeyColumn("FromUnitID").BatchSize(1000);

Я думаю, что мне может понадобиться создать класс UnitToUnitRelationship и связываться с этим, но если есть более простой способ, я, конечно, предпочел бы это, особенно есликак уже отмечалось, мне не нужна собственность в моем домене.

1 Ответ

1 голос
/ 12 сентября 2011

Вы должны взглянуть на .Where() и / или .ChildWhere() методы

  1. .Where(), примененные к справочной таблице
  2. .ChildWhere(), примененные к дочерней таблице

Итак, я думаю, что вы должны использовать .Where("RelationshipType='FOO'") для решения вашей проблемы.

...