我是EF7的新手。我知道这是重复的问题:
No database providers are configured EF7
但是请等待,直到您想关闭此问题...,然后继续阅读
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddScoped<TestRepository, TestRepository>();
现在,我在EF项目的cmd窗口上运行dnx ef数据库更新命令,并收到以下错误消息:
C:\TGB.DataAccess>dnx ef database update
System.InvalidOperationException: No database providers are configured. Configure a database provider by overriding OnConfiguring in your DbContext class or in the AddDbContext method when setting up services.
bei Microsoft.Data.Entity.Internal.DatabaseProviderSelector.SelectServices(ServiceProviderSource providerSource)
bei Microsoft.Data.Entity.Internal.DbContextServices.<>c__DisplayClass6_0.<Initialize>b__0()
bei Microsoft.Data.Entity.Internal.LazyRef`1.get_Value()
bei Microsoft.Data.Entity.Internal.DbContextServices.get_DatabaseProviderServices()
bei Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c.<AddEntityFramework>b__0_8(IServiceProvider p)
bei Microsoft.Extensions.DependencyInjection.ServiceLookup.FactoryService.Invoke(ServiceProvider provider)
bei Microsoft.Extensions.DependencyInjection.ServiceProvider.ScopedCallSite.Invoke(ServiceProvider provider)
bei Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass12_0.<RealizeService>b__0(ServiceProvider provider)
bei Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
bei Microsoft.Extensions.DependencyInjection.ServiceProviderExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
bei Microsoft.Extensions.DependencyInjection.ServiceProviderExtensions.GetRequiredService[T](IServiceProvider provider)
bei Microsoft.Data.Entity.Design.Internal.DesignTimeServicesBuilder.Build(DbContext context)
bei Microsoft.Data.Entity.Design.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
bei Microsoft.Data.Entity.Commands.Program.Executor.<>c__DisplayClass7_0.<UpdateDatabase>b__0()
bei Microsoft.Data.Entity.Commands.Program.Executor.Execute(Action action)
No database providers are configured. Configure a database provider by overriding OnConfiguring in your DbContext class or in the AddDbContext method when setting up services.
现在,我尝试根据我粘贴在顶部的解决方案链接来更改
ApplicationDbContext
的构造函数:那就是我的代码:
我的ApplicationDbContext.cs实际上为空,这意味着我没有覆盖任何内容。
看着基类的基类,有一个带有参数DbContextOptions的重载构造函数,但是我不能从构造函数中传递任何东西吗?
//
// Summary:
// Initializes a new instance of Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext.
//
// Parameters:
// options:
// The options to be used by a Microsoft.Data.Entity.DbContext.
public IdentityDbContext(DbContextOptions options);
我这边坏了什么?我正在使用EF 7 RC1和dnx 451。
仅当您将ApplicationDbContext/ApplicationUser和整个Migrations文件夹移至另一个“DataAccess”项目时,才会发生这种情况。然后一切似乎都坏了。
最佳答案
"dependencies": {
"Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
}
DataAccess
作为依赖项。由于DataAccess
引用了上述2个软件包,因此您可以从WebProject中删除这些引用。构建现在应该成功,您可以启动Web应用程序。
如何使用ef迁移:
在命令行中,转到WebProject的目录(而不是DataAccess项目)。
从这里开始,所有ef命令都可以正常工作。
要将新的迁移添加到DataAccess项目的Migrations文件夹,您需要使用
-p
标志。喜欢,dnx ef migrations add Sample -p DataAccess
。出现问题是因为命令是从DataAccess项目中的cmd运行的。用于初始化所有服务的启动类位于WebProject中。当您尝试从DataAccess目录运行命令时,由于已引用
dnx ef
,因此将识别EntityFramework.Commands
,但是当您尝试使用迁移时,服务不会初始化,因此将无法抛出上述异常。