Я застрял в этой проблеме уже более недели. Надеюсь, кто-то может указать мне в правильном направлении.
Начну с краткого описания моей схемы.
Активы 1 --- > 1 Адрес * → 1 Район * → 1 Регион * → 1 Страна
Пакет 1 → * Активы
Использование объекта самоконтроля (STE) + WCF.
Шаги:
- Хранить хранилище данных для списка активов.
- Вызов хранилища данных для списка пакетов.
- Пользователь выбирает пакет и присваивает ему некоторые активы.
- Сохранить пакет.
На шаге 2 вызов использует активную загрузку Адресов.
from p in context.Assets.Include("Address.Area.Region.Country")
Это ошибка при попытке вызвать
context.Packages.ApplyChanges(package)
AcceptChanges не может продолжаться, потому что значения ключа объекта конфликтуют с другой объект в ObjectStateManager. Убедитесь, что значения ключа уникальны перед вызовом AcceptChanges.
ИЗМЕНИТЬ
После snooping вокруг, я обнаружил, что это проблема STE. Проблема заключается в том, что вы не можете сохранять граф, содержащий несколько экземпляров одного и того же объекта, как описано здесь. Вот мой вопрос.
Как добавить объект в свою сущность коллекция. Новый объект может иметь связанные объекты, которые содержат одинаковые ключ как один уже в коллекции. То есть Добавить новый актив, который может содержать тот же адрес, область, регион или страна.
Вот мои ограничения:
- Я должен использовать навигационную коллекцию, потому что она влияет на пользовательский интерфейс.
- Я не могу предварительно выбрать все объекты, которые будут задействованы, потому что набор данных просто слишком большой.
- Я должен иметь возможность делать снимки объекта в любое время, чтобы сохранить историю и использовать ее для "отмены" любых изменений.
Я знаю о возможных решениях, предложенных Diego B Vega, но это не опции, которые я могу использовать для своего решения. У кого-нибудь есть другие идеи?