Entity Framework взлома - PullRequest
       4

Entity Framework взлома

0 голосов
/ 30 января 2012

У меня есть объект с именем DocumentItem.У него есть естественный ключ, который состоит из двух столбцов: DocumentId (идентификатор документа) и Index (позиция элемента в документе).

Это естественный ключ, поэтому его иногда приходится менять.Entity Framework предотвращает изменения ключа.Однако мне удалось связать вставки / обновления / удаления с хранимыми процедурами.Они получают один дополнительный параметр - NexIndex, который становится новым индексом для DocumentItem при выполнении sproc.

Однако существует одна проблема: управление менеджером состояния объекта, чтобы он имел текущую и действительную информацию.Представьте себе такую ​​ситуацию:

Документ с элементами документа:

1.2. 3. 4. 5.

Пользователь удаляет номер 3 и добавляет новую позицию (всегда в конце, пользователь не может изменить порядок элементов).

Список изменений: Удалить 3 (нормально) Обновить 4-> 3 (ок) Обновление 5 -> 4 (ок) Вставка 5 - это то место, где она ломается

Проблема в том, что Entity Framework не знает об изменениях индекса.Я пытался привязать индекс обратно из базы данных, но он всегда приводит к исключению «Невозможно определить действительный порядок операций ...».

Теперь ситуация такова: EF считает, что у него уже есть элементс индексом 5, поэтому последняя вставка прерывается.

Мне нужно что-то сделать, чтобы очистить состояние объекта обновленных элементов, чтобы я мог добавить новые, прикрепить или загрузить их из БД.Что я могу сделать?

1 Ответ

2 голосов
/ 30 января 2012

Делать это с базой данных - боль в заднице вообще. Вы можете разместить свой столбец заказа в базе данных, но не использовать его как «реальный заказ» без пробелов. Если вы удалите товар с порядком = 3, пусть будет так. Там будет разрыв. Когда вы вставляете новый предмет, добавляйте его с порядком = 6. Ваши товары будут по-прежнему заказаны в правильном порядке.

Если вам не нравится эта идея, вернитесь к ADO.NET или не используйте порядок как часть ключа.

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