ASP.NET vNext EF7 dbContext 问题

Posted

技术标签:

【中文标题】ASP.NET vNext EF7 dbContext 问题【英文标题】:ASP.NET vNext EF7 dbContext issues 【发布时间】:2015-01-25 15:47:44 【问题描述】:

我正在启动一个 vNext 项目,但在启动它时遇到了一些问题。我在ApplicationDbContext 类中添加了一个表,它成功地在数据库中创建了表(在我的例子中是在 Azure 中)。但是,我似乎无法正确实例化 dbContext 以在我的控制器中使用。

根据我以前的 ASP.NET EF 项目的经验,我可以在不传递任何参数的情况下实例化 ApplicationDbContext 类,但是在 vNext 的情况下,它似乎需要一些东西(IServiceProvider 和 @987654325 @)。我尝试创建一个无参数构造函数,但由于不知道要使用什么连接字符串,应用程序中断。我的代码在下面——正如您在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;
            
        
    

【问题讨论】:

Using EF7 in Traditional .NET Applications 可能对您有所帮助。 【参考方案1】:

IServiveProvider 和 IOptionAccessor 由依赖注入注入 ASP.Net Core DI 有限制,你不能有多个构造函数。

阅读:http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx

【讨论】:

以上是关于ASP.NET vNext EF7 dbContext 问题的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 5 (vNext) - 获取配置设置

ASP.NET 5 (vNext) - 获取配置设置

ASP.NET 5 (vNext) 中的身份验证

ASP.NET vNext 可以使用非 vNext 引用吗?

ASP.NET 5 EF7 代码优先迁移默认按字母顺序创建列

ASP.NET vNext - 动态编译代码不适合我