我有一个现有的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]
表没有索引列。当客户的发票被加载时,我不希望它们位于阵列中的任何特定位置。
我有什么选择?
答案 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>