Я борюсь с проблемой, связанной с NHibernate, где я мог бы использовать некоторый ввод.
Введение:
У меня есть устаревшая база данных, где реляционные понятия на самом деле не применяются.
В базе данных есть таблица OrderLine
, которая содержит данные для строк заказа.
Кроме того, таблица также содержит все столбцы с Order
конкретной информацией. Это может быть, например, номер заказа клиента.
E.x. Если у меня есть 10 строк порядка, то у меня есть 10 строк в моей таблице OrderLines
, и каждая строка имеет все специфические данные Order
, например. номер заказа или информация о клиенте.
Я не хотел иметь вышеуказанную структуру в своем коде, поэтому для Orders
было создано представление, чтобы я мог сопоставить мой Order
в NHibernate, который затем имеет набор/пакет OrderLines
, который делает намного больше смысл.
Отображение: (упрощено)
<class name="Order" table="[view_Orders]">
<bag name="OrderLines">
</class>
<class name="OrderLine" table="OrderLines" />
Проблема:
Сложность представления делает невозможным сохранение в представлении. При попытке NHibernates выбрасывает это исключение:
NHibernate.Exceptions.GenericADOException: не удалось вставить: XXX --- > System.Data.SqlClient.SqlException: представление или функция 'view_Orders' не обновляется, поскольку модификация затрагивает несколько базовых таблиц.
Мое отображение NHibernate построено как объект Order
, который имеет "набор или сумку" объектов OrderLine
. В идеале я бы хотел, чтобы NHibernate только сохранял набор объектов OrderLine
вместо всего объекта.
Есть ли способ достичь этого? Я попытался заблокировать объект, используя разные режимы блокировки, но мне это не помогло.