ASP.NET vNext EF7 dbContext issues
本文关键字:dbContext issues EF7 vNext NET ASP | 更新日期: 2023-09-27 18:32:22
我正在启动一个vNext项目,但是在启动它时遇到了一些问题。我已经向ApplicationDbContext
类中添加了一个表,它成功地在数据库中创建了表(在我的例子中是在 Azure 中)。但是,我似乎无法正确实例化要在控制器中使用的dbContext
。
根据我对以前的 ASP.NET EF项目的经验,我可以实例化ApplicationDbContext类而不向其传递任何参数,但是在vNext的情况下,它似乎期望许多事情(IServiceProvider
和IOptionsAccessor<DbContextOptions>
)。我尝试创建一个无参数构造函数,但由于不知道要使用什么连接字符串,应用程序中断。我的代码如下 - 正如您在OnConfiguring(DbContextOptions options)
覆盖中看到的那样,我通过DbContextOptions
强制连接字符串,但这显然并不理想,我觉得我只是不明白这两个IServiceProvider
和IOptionsAccessor参数需要来自哪里。
感谢您的任何帮助!
namespace Project.Models
{
// Add profile data for application users by adding properties to the ApplicationUser class
public class ApplicationUser : IdentityUser
{
public string CompanyName { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
private static bool _created = false;
public DbSet<Business> Businesses { get; set; }
public ApplicationDbContext()
: base()
{
if (!_created)
{
Database.EnsureCreated();
_created = true;
}
}
protected override void OnConfiguring(DbContextOptions options)
{
var configuration = new Configuration();
configuration.AddJsonFile("config.json");
configuration.AddEnvironmentVariables();
options.UseSqlServer(configuration.Get("Data:DefaultConnection:ConnectionString"));
}
public ApplicationDbContext(IServiceProvider serviceProvider, IOptionsAccessor<DbContextOptions> optionsAccessor)
: base(serviceProvider, optionsAccessor.Options)
{
// Create the database and schema if it doesn't exist
// This is a temporary workaround to create database until Entity Framework database migrations
// are supported in ASP.NET vNext
if (!_created)
{
Database.EnsureCreated();
_created = true;
}
}
}
}
IServiveProvider 和 IOptionAccessor 由依赖注入注入核心 DI ASP.Net 有限制,不能有多个构造函数。
阅读: http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx