Обновление Entity Framework? - PullRequest
       5

Обновление Entity Framework?

0 голосов
/ 09 марта 2011

Как обновить сущность в EF 4?

Например:

1) Используйте AutoMapper для генерации CategoryEditModel из сущности Category из сервисного уровня.

2) Передайте модель редактирования в представление. Отлично !!

3) Отправьте обратно EditModel, используйте AutoMapper, чтобы взять CategoryEditModel -> Category.

4) Возьмите эту категорию и передайте ее сервисному уровню, который передает ее репозиторию, который, в свою очередь, выполняет ObjectSet.Attach (TEntity).

Сообщает мне, что ObjectStateManager имеет другой объект с тем же ключом ???

Я использую Ninject для внедрения Контроллера с помощью Сервиса и UnitOfWork, Сервиса с Репозиторием, Репозитория с UnitOfWork. UnitOfWork определяется по запросу.

Кажется, что-то хранится в кеше, может быть?

Должен ли я позвонить в UOW, или Ninject позаботится об этом? Он реализует IDisposable и в своем распоряжении избавляется от контекста.

Ответы [ 2 ]

0 голосов
/ 09 марта 2011

Я думаю, что вы должны использовать только один объект Entity Framework Session без репозитория. Взгляните на этот пост: Вопрос об интерфейсах и DI? и дайте мне знать, если у вас есть вопросы. Это код в первую очередь, и он прекрасно работает для меня.

Надеюсь, это поможет вам!

0 голосов
/ 09 марта 2011

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

public SomeObject GetSomeObjectById(int id)
{
    using (var context = _contextFactory.Get())
    {
        return context.SomeObjects.SelectSingle(o => o.Id == id);
    }
}

Если вы совершенно уверены, что хотите следовать модели «один контекст для запроса», вам нужно загрузить нужную сущность из контекста (которая должна быть бесплатной , если вы используете context.GetObjectByKey, поскольку в данном случае это звучит так, как будто оно кэшировано), измените значения объекта, а затем сохраните изменения.

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