использование NHibernate для таблицы без первичного ключа - PullRequest
2 голосов
/ 07 января 2010

Я (надеюсь) только начинаю свой первый проект NHibernate и столкнулся с камнем преткновения. Буду признателен за любые советы.

Я работаю над проектом, в котором мой новый код будет работать параллельно с унаследованным кодом, и я вообще не могу изменить модель данных. Я сталкивался с ситуацией, когда одна из основных таблиц не имеет первичного ключа. Это что-то вроде этого:

Скажем, есть таблица заказов и таблица продуктов, а также таблица line_item, в которой перечислены продукты в каждом заказе (т. Е. Состоят из order_id, product_id и количества). В этой модели данных вполне возможно иметь 2 позиции для одного и того же продукта в одном и том же порядке. В существующем коде происходит то, что всякий раз, когда пользователь обновляет позицию, все позиции для этого заказа удаляются и вставляются повторно. Поскольку даже составной ключ всех полей в таблице line_item не обязательно будет уникальным, это единственный возможный способ обновить позицию в этой модели данных.

Я готов гарантировать, что никогда не буду пытаться обновить или удалить отдельную позицию. Могу ли я заставить свой код NHibernate работать так же, как существующий код? Если нет, значит ли это, что я (а) вообще не могу использовать NHibernate; (б) я не могу использовать NHibernate для отображения таблицы line_item; или (с) я все еще могу отобразить эту таблицу, но не ее взаимосвязи

Заранее спасибо за любые советы

1 Ответ

0 голосов
/ 07 января 2010

Я думаю, если вы отобразите это как коллекцию сумок в Ордене (с обратным = "false"), это сработает.

Отображение коллекции

Примечание: сопоставлены большие пакеты NHibernate с обратным = "ложь" неэффективны и следует избегать; NHibernate не может создавать, удалять или обновлять строки индивидуально, потому что нет ключа которые могут быть использованы для идентификации отдельный ряд.

Они предупреждают об этом, но это звучит как то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...