我有一个包含3个项目的Visual Studio 2017解决方案。一个类库具有DAL(.NET Standart 2.0),一个AP.NET MVC应用程序(.NET Core 2.0)和第三个控制台应用程序(.NET Framework 4.6.1)。
我在两个项目中都引用了DAL。它已经实现了工作单元模式,并使用了Entity Framework Core。
在ASP.NET MVC项目中,我已配置为使用依赖项注入获取上下文,如下所示
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));
但是我在上面的第一行代码中遇到了以下错误
在通用类型或方法“ DbContextOptionsBuilder”中,类型“ DAL.ApplicationDbContext”不能用作类型参数“ TContext”。从'DAL.ApplicationDbContext'到'Microsoft.EntityFrameworkCore.DbContext'没有隐式引用转换。
第二个错误
类型'IdentityDbContext <,,>'在未引用的程序集中定义。您必须添加对程序集'Microsoft.AspNetCore.Identity.EntityFrameworkCore,Version = 2.0.1.0,Culture = neutral,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 Identity一起使用,但是在控制台应用程序中,则不需要它。