如果表中没有索引,如何配置NHibernate映射到数组?

时间:2009-11-17 03:32:02

标签: nhibernate

我有一个现有的POCO类库,其中子集合都存储在数组中。例如,Customer类有一个Invoice []数组来保存其发票:

class Customer
{
    public int ID;
    public Invoice[] _invoices;
}

class Invoice
{
    public int ID;
    public int CustomerID;
    public string SomeData;
}

我无法更改这些类,我想使用NHibernate将它们映射到现有数据库。

我查看了<array>映射,但它似乎需要一个<index>元素。在我的数据库中,[Invoice]表没有索引列。当客户的发票被加载时,我不希望它们位于阵列中的任何特定位置。

我有什么选择?

1 个答案:

答案 0 :(得分:2)

不幸的是,您可以选择更改班级或表格。

A)您可以更改Customer以将发票声明为IList而不是数组;然后,您就可以将它们映射为unsorted bag。您甚至可以按某些列对其进行排序:

<bag name="Invoices" table="Invoices" order-by="ID ASC"> <!-- order-by is optional -->
  <key column="CustomerID"/>
  <element column="SomeData" type="String"/>
  <!-- or use one-to-many if Invoice is mapped as entity -->
  <one-to-many class="Whatever.Invoice, Whatever"/>
</bag>

B)。您可以更改表格以包含索引列,并将发票映射为真实<array>

<array name="Invoices" table="Invoices" order-by="ID ASC"> <!-- order-by is optional -->
  <key column="CustomerID"/>
  <index column="IndexNr"/>
  <element column="SomeData" type="String"/>
</array>