Как настроить NHibernate для сопоставления с массивом, если в таблице нет индекса? - PullRequest
3 голосов
/ 17 ноября 2009

У меня есть библиотека классов 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 Ответ

2 голосов
/ 17 ноября 2009

К сожалению, вы можете изменить либо класс, либо таблицу.

A) Вы можете изменить Customer, чтобы объявить счета как IList вместо массива; После этого вы сможете отобразить их как несортированный пакет . Вы даже можете отсортировать его по некоторому столбцу:

<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>

В). Вы можете изменить свою таблицу так, чтобы она содержала столбец индекса, и отобразить счета как реальные <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...