Возможно ли иметь DbContext в DAL в многоуровневом приложении ASP.NET Core? - PullRequest
0 голосов
/ 26 сентября 2018

Например, если у меня есть 3 слоя:

Data access layer -> Business Logic Layer -> Presentation Layer

, возможно ли иметь DbContext в DAL, учитывая, что я не могу ссылаться на него из уровня представления?

Если да, то как я могу инициализировать, используя DB в Startup.cs, если я не смогу увидеть DbContext?

services.AddEntityFrameworkSqlServer()
        .AddDbContext<DbContext>(options =>
                {
                    ...
                });

1 Ответ

0 голосов
/ 26 сентября 2018

Я нашел такое решение моей проблемы (учитывая, что ребята помогли мне в комментариях) У меня есть статический класс с методом расширения для IServiceCollection

public static IServiceCollection RegisterRepositories(this IServiceCollection services, IConfiguration configuration)
    {
        services.AddScoped(typeof(IRepository<>), typeof(BaseRepository<>));
        services.AddScoped(typeof(DbContext), typeof(NorthwindContext));
        services.AddEntityFrameworkSqlServer()
            .AddDbContext<NorthwindContext>(options =>
            {
                options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
            });

        return services;
    }

У меня примерно то же самое, но дляBLL

public static class ServiceCollectionsExtensions
{
    public static IServiceCollection RegisterBllServices(this IServiceCollection services, IConfiguration configuration)
    {
        services.RegisterRepositories(configuration);
        services.AddScoped<IProductService, ProductService>();

        return services;
    }
}

А в Layer Presentation в Startup.cs у меня есть что-то вроде этого

services.RegisterBllServices(_configuration);

Так что теперь Presentation Layers ничего не знает о DbContext и что ORMЯ использую

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