winforms Объект сущности не может ссылаться несколькими экземплярами IEntityChangeTracker - PullRequest
0 голосов
/ 29 августа 2011

Я получаю эту ошибку при попытке добавить несколько свойств.

  public NewPropertyHelper(DataLayer.IAccrualRepository Repository) {
        this.SaveAction = Properties => {
            foreach (Property P in Properties)
            {
                Repository.Properties.AddObject(P);
                Repository.SaveChanges();
            }
        };
    }

1 Ответ

1 голос
/ 29 августа 2011

Из того, что я могу собрать, строка

Repository.Properties.AddObject(P);

пытается добавить объект P в текущий репозиторий, и, поскольку вы получили его из другого репозитория, вам необходимо сначала удалить его (или отсоединить) от другого репозитория.

РЕДАКТИРОВАТЬ: Итак, я предполагаю, что где-то в репозитории, есть обернутый DataContext (или, возможно, Repository наследует ваш DataContext. Когда вы получаете объект из DataContext, объект постоянно ссылается на трекер изменений, который отслеживает что нужно отправить обратно в базу данных, если вы обновите этот объект. Так как вы не хотите дважды считать какие-либо объекты, EF не позволяет вам присоединять этот объект к более чем одному контексту данных за раз. Для объекта в новом контексте данных вам необходимо отсоединить его от DataContext, который уже отслеживает его.

Для этого вам нужно вызвать метод Detach для объекта и любых объектов, на которые он ссылается, которые также отслеживаются EF. Хороший пример того, как это сделать, можно найти здесь: http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx

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