Entity Framework Core получает контекст в консольном приложении - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть решение Visual Studio 2017 с 3 проектами. Одна библиотека классов с DAL (.NET Standart 2.0), одно приложение AP.NET MVC (.NET Core 2.0) и третье консольное приложение (.NET Framework 4.6.1).

Я ссылался на DAL в обоих проектах. Он внедрил шаблон Unit of Work и использует Entity Framework Core.

В проекте ASP.NET MVC я настроил получение контекста с помощью Dependency Injection следующим образом

services.AddDbContext<ApplicationDbContext>(options =>
{
    options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"],
        b => {
                b.MigrationsAssembly("OpenData.Backend");
                b.CommandTimeout(4000);
            }
            );
});

Также Единица работы настроена следующим образом

// Repositories
services.AddScoped<IUnitOfWork, HttpUnitOfWork>();

И в контроллере я могу использовать его так:

public class TestServiceController : Controller
{

    private IUnitOfWork _unitOfWork;

    public TestServiceController(IUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
    }
}

Я хочу использовать тот же подход в консольном приложении. Поскольку я не смог установить DI в консольном приложении, я подумал, что могу создать экземпляр UnitOfWork

var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString());

_unitOfWork = new UnitOfWork(new ApplicationDbContext(optionsBuilder.Options));

Но я получаю следующую ошибку в первой строке кода выше

Тип «DAL.ApplicationDbContext» нельзя использовать в качестве параметра типа «TContext» в универсальном типе или методе «DbContextOptionsBuilder». Не существует неявного преобразования ссылок из 'DAL.ApplicationDbContext' в 'Microsoft.EntityFrameworkCore.DbContext'.

Вторая ошибка

Тип 'IdentityDbContext <,,>' определен в сборке, на которую нет ссылок. Необходимо добавить ссылку на сборку 'Microsoft.AspNetCore.Identity.EntityFrameworkCore, версия = 2.0.1.0, культура = нейтральная, PublicKeyToken = adb9793829ddae60'.

ApplicationDbContext объявляется следующим образом

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {
        //Some configuration removed
    }
    // DbSet removed
}

В приложении ASP.NET оно используется с удостоверением ASP.Net, но в консольном приложении это не требуется.

...