Entity Framework - Отсоединение сущностей, когда ObjectContext расположен? - PullRequest
1 голос
/ 11 февраля 2010

Я использую EF в приложении WinForms, моя идея состоит в том, чтобы использовать ObjectContext для каждой транзакции, а не один длительный контекст. Но я получаю сообщение об ошибке, когда пытаюсь присоединить объекты из предыдущей транзакции к новой, что связано с тем, что объект уже находится в другом контексте.

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

EDIT

Очевидно, что сущности не отсоединяются после удаления контекста, как сказал @ F.Aquino, но выполнение чего-то подобного, похоже, работает. Хотя я не уверен, что это правильный способ обработки сущностей. Может быть, кто-то может прокомментировать проблемы, которые могут возникнуть из этого:

public void Attach(params EntityObject[] objects)
{
    foreach (EntityObject obj in objects)
    {
        ((IEntityWithChangeTracker)obj).SetChangeTracker(null);
        entities.Attach(obj);
    }
}

Обычно, когда я хочу присоединить сущность к контексту, я просто обнуляю трекер изменений сущности, а затем просто присоединяю его к новому контексту. Вроде нормально работает.

1 Ответ

3 голосов
/ 11 февраля 2010

Вы должны отсоединить их вручную и иметь в виду, что все ссылки будут удалены в процессе. Существует этот великий магический класс , который имеет дело со всеми неприятностями при повторном присоединении сущностей в EF 1, по словам Матье Мезиля, использование будет примерно таким:

public static EntityObject SaveOrUpdate(this EntityObject entity)
{
    using (MyEntities context = new MyEntities())
    {
        entity.AttachGraph(context, () => new MyEntities());
        context.SaveChanges();
        return entity;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...