2

Я довольно новичок в платформе Entity Framework и все еще изо всех сил пытаюсь ее решить. Так много разных примеров и объяснений, которые я не могу понять, что делать?Entity Framework 6, Должен ли я использовать шаблон репозитория?

У меня есть несколько вопросов:

В моем текущем приложении я использовал шаблон, который состоит из:

  • Repository Pattern
  • (Сверху) Единица работы

Для каждого из, я объявляю NEW Unit of Work. Поэтому, когда я делаю Savechanges, затрагиваются только связанные элементы.

Для сложной бизнес-логики, я пишу свои методы внутри хранилища для каждого класса Например:

  • Один из способов: Удалить один элемент из одного места инвентаря, переместить его в другое место, а затем уменьшить количество в старом месте и т. д. - Более сложные задания, которые читаются из разных таблиц и записываются во многие таблицы.

Однако недавно я узнал, что Entity Framework 6.0:

  1. DbContext = единица работы
  2. DbSet эквивалентно СКЛАДе

Так вопросы:

  1. Должен ли я использовать ONE DBCONTEXT или объявлять новое для каждого f orm/operation, поэтому транзакции остаются в локальном контексте (form/operation =
    1. Как заменить методы в моем репозитории?

Благодаря

+0

DbSet - это не репозиторий, если только ваши объекты домена не могут использоваться как «как есть» EF.Даже тогда тот факт, что он раскрывает IQueryable, поражает цель шаблона репозитория. В двух словах, репозиторий является принципом, и его реализация не является DbSet, но реализация может использовать EF как внутреннюю деталь. – MikeSW

+0

спасибо, это был тот момент, который я ошибся, извините за то, что вы указали правильный путь. –

ответ

1

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

Во-вторых, попробуйте отделить свои «проблемы с уровнем данных» от ваших «Деловых проблем». например:

Один из способов: Удалить один элемент из одного места инвентаря, переместить его в другое место, а затем уменьшить количество на старом месте

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

+0

Спасибо Хади за тонкий ответ. Что касается DbContext, у меня также возникло ощущение, что каждый раз я нуждаюсь в отдельном DbContext из-за транзакций. О втором вопросе вы говорите, что я должен сохранить свои репозитории и написать в них методы бизнес-логики? Не могли бы вы показать мне примерный примерный пример кода? –

+0

В моем личном опыте наилучшей практикой использования DbContext является создание экземпляра его каждый раз в операциях (не забудьте использовать блок «Использование», чтобы избежать утечки памяти). о втором вопросе, я имею в виду, что вы ** смело ** не должны ** смело ** писать бизнес-логику в своих хранилищах. Например, у вас должен быть только простой метод Update() в вашем репозитории, а затем ваши методы бизнес-логики будут использовать это обновление для «Переместить запас из одного места» [link] http://efgenericrepository.codeplex.com/SourceControl/latest# GenericRepository/EfGenericRepository/Repository/IRepository.cs [link] –

+0

Извините, в моем последнем комментарии возникла проблема, теперь я не могу ее отредактировать. правильная ссылка: [EF Generic Repository Pattern] (http://efgenericrepository.codeplex.com/SourceControl/latest#GenericRepository/EfGenericRepository/Repository/IRepository.cs) –

Смежные вопросы