Идентификация ASP.NET с репозиторием и единицей работы

Я изучаю шаблоны репозитория и единицы работы в приложении ASP.NET MVC 5 с Entity Framework 6.

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

Что у меня сейчас есть:

IRepository и GenericRepository реализуют IRepositoryIUnitOfWork и UnitOfWork, реализующие IUnitOfWorkIDbContext и MyDbContext унаследованы от IdentityDbContext и реализуют IDbContext

Не уверен, что мне нужно вставить код для него, я думаю, что он довольно общий и проблема на самом деле не в Repository / UnitOfWork как таковом. У меня проблема с использованием классов удостоверений ASP.NET в сочетании с моими репозиториями и единицами работы. Я использую ту же базу данных для членства и для всех других данных - и я думаю, что это общий сценарий. Я не могу найти хорошее решение, как я могу создать экземпляры классов ASP.NET Identity, используя мои репозитории.

UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(_DBCONTEXT_);
this.UserManager = new UserManager<ApplicationUser>(store);

Что я должен поставить вместоDbContext, чтобы он использовал тот же DbContext с моим UnitOfWork? Или как это можно сделать другим способом, чтобы ASP.NET Identity работал с UnitOfWork?

Я попытался выставить DbContext как открытое свойство класса UnitOfWork, что-то вроде:

UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(this.unitOfWork.MyDbContext);

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

Я также пытался реализовать CustomUserStore и CustomRoleStore - в целом это работало, но, поскольку я тестировал его, требовалось реализовать все больше и больше методов. Это решение выглядит слишком сложным - я действительно надеюсь, что должен быть более простой способ.

Ответы на вопрос(4)

Ваш ответ на вопрос