NHibernate和父/子集合映射

时间:2010-02-17 11:59:50

标签: .net nhibernate nhibernate-mapping entity-relationship

我有这个包含父元素和子元素的表。

CREATE TABLE Expenses(
    [BudgetId] int,
    [AccountGroupId] int,
    [AccountNumber] int,
    [Amount] decimal
)

在我的域模型中,它由这个层次表示:

  • 预算
    • AccountGroup
      • ExpenseLine
      • ExpenseLine
      • ExpenseLine

因此,预算有一组AccountGroups,每个AccountGroup都有一个ExpenseLines集合。

如果Expenses表中的行具有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”部分:)

0 个答案:

没有答案