Использование вставленного DbContext вместе с DbContext, созданным в Startup.Auth - PullRequest
0 голосов
/ 02 мая 2018

В Asp.Net MVC шаблон по умолчанию поставляется с классом запуска в Startup.Auth.cs

public partial class Startup
{
    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
    public void ConfigureAuth(IAppBuilder app)
    {
        // Configure the db context, user manager and signin manager to use a single instance per request
        app.CreatePerOwinContext(ApplicationDbContext.Create);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
        app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

Согласно комментарию в этом шаблоне, экземпляр ApplicationDbContext создается для запроса.

В моем приложении я использую шаблон репозитория и вставляю ApplicationDbContext в репозитории. В моем случае я использую Ninject, который при необходимости может использовать один и тот же контекст для нескольких репозиториев.

Есть ли способ использовать тот же введенный ApplicationDbContext в Startup.Auth ? Не совсем уверен, что это хорошая идея изменить шаблон по умолчанию, в то же время мы создаем 2 экземпляра одного и того же контекста в одном запросе ...

В моем коде Ninject я привязываю ApplicationDbContext к себе, как показано ниже:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();

Не совсем уверен, что это плохая практика - привязывать контекст к себе вместо создания интерфейса? (хотя работает нормально).

1 Ответ

0 голосов
/ 02 мая 2018

Не совсем уверен, что это плохая практика - привязывать контекст к себе. вместо создания интерфейса?

Регистрация DbContext как себя и времени жизни для каждого запроса вполне нормальная.

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

public class ApplicationDbContext : DbContext, IDbContext
{
}

IDbContext

public interface IDbContext
{
   DbSet<MyEntity> MyEntities { get; set; }
   ...
}
...