entity framework7没有配置数据库提供程序=>将迁移移动到另一个项目时
我是EF7的新手。 我知道这是一个重复的问题:
没有数据库提供程序配置EF7
但是在你想要关闭这个问题之前等待……继续阅读
services.AddEntityFramework() .AddSqlServer() .AddDbContext(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); services.AddScoped();
现在我在我的EF项目的cmd窗口上运行dnx ef database update命令并得到以下错误:
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.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.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.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.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”项目时,才会发生这种情况。 一切似乎都破了。
-
使用Web应用程序模板(身份validation:个人用户帐户)创建名为“WebProject”的新ASP.NET Web应用程序。
-
现在将另一个项目添加到名为“DataAccess”的解决方案中(假设类库类型虽然不相关)
-
现在将ApplicationDbContext / ApplicationUser文件和迁移文件夹移动到DataAccess项目。
-
在这个阶段,构建将失败,因此我们需要更正project.json以获取正确的引用。
-
对于DataAccess项目,添加以下依赖项
"dependencies": { "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final", "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final" }
-
对于WebProject,将
DataAccess
添加为依赖项。 由于DataAccess
引用了上述2个包,因此可以从WebProject中删除这些引用。
Build现在应该成功,您可以启动Web应用程序。
如何使用ef迁移:
在命令行中,转到WebProject的目录(而不是DataAccess项目)。 所有的ef命令都可以在这里正常工作。
要将新迁移添加到DataAccess项目的Migrations文件夹,需要使用-p
标志。 喜欢,
dnx ef migrations add Sample -p DataAccess
。
出现此问题是因为命令是从DataAccess项目中的cmd运行的。 初始化所有服务的启动类位于WebProject中。 当您尝试从DataAccess目录运行命令时,将识别dnx ef
因为引用了EntityFramework.Commands
但是当您尝试使用迁移时,服务未初始化,因此它将无法抛出exception。
尝试将Context类移动到“DataAccess”项目,并在“DataAccess”项目中覆盖Context的OnConfiguring方法,然后运行迁移。
public partial class MyContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder options) { options.UseSqlServer(@"Server=****;Database=***;user id=***;password=***"); } }
或者,如果您不想对连接字符串进行硬编码,则可以执行以下操作。 DI将为您注入选项;
public partial class MyContext : DbContext { public MyContext(DbContextOptions options) : base(options) { } }
在你的Startup.cs上;
public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json") } public void ConfigureServices(IServiceCollection services) { services.AddEntityFramework() .AddSqlServer() .AddDbContext(options => options.UseSqlServer(Configuration["Data:MyDb:ConnectionString"])); }
和你的appsetting.json;
{ "Data": { "MyDb": { "ConnectionString": "**********" } } }
- ASP.NET MVC 6中MVC Controller和Web API Controller有什么区别?
- AspNet.Security.OpenIdConnect.Server。 刷新令牌
- ASP.NET 5,MVC6,WebAPI – > ModelState.IsValid始终返回true
- 没有配置身份validation处理程序来validation该方案:Microsoft.AspNet.Identity.External
- ASP.NET Core Identity不会注入UserManager
- 对于未经身份validation的重定向到URL而不是401
- HttpRuntime.Cache等效于asp.net 5,MVC 6
- ASP.NET 5(核心):如何在会话缓存(ISession)中存储对象?
- ASP.NET Core API Controller:Response.Body.WriteAsync base64字符串无法正常工作