У меня есть эта таблица, содержащая как родительские, так и дочерние элементы.
CREATE TABLE Expenses(
[BudgetId] int,
[AccountGroupId] int,
[AccountNumber] int,
[Amount] decimal
)
В моей доменной модели она представлена такой иерархией:
- Бюджет
- AccountGroup
- ExpenseLine
- ExpenseLine
- ExpenseLine
Таким образом, у бюджета есть коллекция учетных групп, а у каждой учетной записи есть коллекция учетных линий.
Если строка в таблице «Расходы» имеет AccountNumber = 0, это AccountGroup (родитель), а в противном случае это ExpenseLine (дочерний элемент AccountGroup).
Я пытаюсь выразить это отношение в файле сопоставления:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Budget, MyCompany.Budget" table="Expenses">
<composite-id>
<key-property name="AccountGroupId" column="AccountGroupId" />
</composite-id>
<property name="BudgetId" column="BudgetId" type="int" not-null="true" />
<property name="AccountNumber" column="AccountNumber" type="int" not-null="true" />
<property name="Amount" column="Amount" />
<bag name="ExpenseLines" lazy="false" where="AccountNumber > 0 AND BudgetId = 7">
<key column="AccountGroupId" />
<one-to-many class="ExpenseLine, MyCompany.Budget" />
</bag>
</class>
</hibernate-mapping>
Отображение работает, пока я загружаю иерархию родительских и дочерних элементов в мою модель, но сейчас мне нужно использовать конкретный идентификатор BudgetId, чтобы избежать выборки всех строк ExpenseLines (следовательно, AND BudgetId = 7)
Как я могу выразить это в моем файле сопоставления, чтобы ExpenseLines выбирал только те строки, которые соответствуют текущему BudgetId?
Другими словами - как мне избавиться от части «AND BudgetId = 7»:)