Я борюсь с проблемой, связанной с NHibernate, где я мог бы использовать некоторый ввод.Как сохранить подмножество объекта вместо всего объекта?
Введение:
У меня есть наследие базы данных, где на самом деле не была применена реляционная концепции.
В базе данных У меня есть таблица OrderLine
, которая содержит данные для строк заказа.
Кроме того, в таблице также содержатся все столбцы с Order
конкретной информацией. Это может быть, например, номер заказа клиента.
E.x. Если у меня есть 10 строк порядка, то у меня есть 10 строк в моей таблице OrderLines
, и каждая строка имеет все конкретные данные Order
, например. номер заказа или информацию о клиенте.
Я не хочу иметь вышеуказанную структуру в моем коде, так был создан вид для Orders
, чтобы я мог сопоставить в NHibernate мой Order
, который затем имеет множество/мешок OrderLines
, что делает гораздо больше смысла.
Mapping: (упрощенный)
<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
вместо всего объекта.
Есть ли способ достичь этого? Я попытался заблокировать объект, используя разные режимы блокировки, но это мне не помогло.
Кажется, что то, что вы пытаетесь сделать, должно работать. Исключение указывает, что NHibernate пытается выполнить UPDATE против вашего объекта Order, который сопоставляется с невосстанавливаемым представлением. NHibernate будет делать это только в том случае, если он считает, что объект грязный, вне коллекций OrderLines. Вы должны проверить свои другие отображаемые свойства. И, возможно, попробуйте использовать профайлер, например NHProf, чтобы узнать, что меняется. –
Точно. Я бы хотел НЕ обновить свой заказ, потому что он сопоставлен с не обновляемым представлением. Вместо этого я хотел бы только обновить дочерний объект, т. Е.мешок OrderLines. Я использую NHProfiler, и исключение сверху - это в основном SQL-Исключение, которое передается через NHibernate. – JuniorCoder