NHibernate и отображение родительской / дочерней коллекции - PullRequest
1 голос
/ 17 февраля 2010

У меня есть эта таблица, содержащая как родительские, так и дочерние элементы.

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»:)

...