C# 实体框架7未配置数据库提供程序=>;当迁移移动到另一个项目时

C# 实体框架7未配置数据库提供程序=>;当迁移移动到另一个项目时,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我是EF7新手。我知道这是一个重复的问题: 但是在你想结束这个问题之前先等一下。。。继续读下去 services.AddEntityFramework() .AddSqlServer() .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

我是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 7 RC1和dnx 451


只有将ApplicationDbContext/ApplicationUser和整个Migrations文件夹移动到一个额外的项目(比如“DataAccess”)时,才会发生这种情况。然后一切似乎都中断了。

尝试将上下文类移动到“DataAccess”项目中,并覆盖“DataAccess”项目中上下文的OnConfigurang方法,然后运行迁移

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<MyContext> options) : base(options)
    {

    }
}
  • 使用Web应用程序模板(身份验证:个人用户帐户)创建名为“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
    引用了上述两个包,您可以从WebProject中删除这些引用。
    现在构建应该成功了,您可以启动web应用程序了

  • 如何使用ef迁移:

    在命令行中,转到WebProject的目录(而不是DataAccess项目)。 从这里开始,所有ef命令都可以正常工作

    要向DataAccess项目的migrations文件夹添加新迁移,需要使用
    -p
    标志。比如,
    dnx ef迁移添加示例-p DataAccess


    出现此问题是因为这些命令是从DataAccess项目中的cmd运行的。正在初始化所有服务的启动类位于WebProject中。当您尝试从DataAccess目录运行命令时,
    dnx ef
    将被识别,因为
    EntityFramework.commands
    被引用,但当您尝试使用迁移时,服务未初始化,因此将无法引发上述异常。

    是否尝试指定上下文,例如
    dnx数据库更新-c ApplicationDbContext
    ?您还可以通过CMD直接在DataAccess项目中指定项目
    -p
    ,并且我运行dnx ef数据库更新-c ApplicationDbContext=>与以前相同的错误!我对-p TGB.DataAccess=>执行了与以前相同的错误!我更新了我的问题并删除了我的ApplicationDbContext代码,因为我没有使用重载构造函数,因为没有任何东西可以重载。。。我想这就是问题所在。这个公共MyContext(DbContextOptions):base(options)在我的代码中是不可能的,因为MyContext没有带任何参数的构造函数。是的,我从DbContext继承!如何在控制器中或需要的任何地方实例化MyContext()?
    public partial class MyContext : DbContext
    {
        public MyContext(DbContextOptions<MyContext> options) : base(options)
        {
    
        }
    }
    
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddEntityFramework()
            .AddSqlServer()            
            .AddDbContext<WtContext>(options =>
                options.UseSqlServer(Configuration["Data:MyDb:ConnectionString"]));
    }
    
    {
      "Data": {
        "MyDb": {
          "ConnectionString": "**********"
        }
      }
    }
    
    "dependencies": {
        "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
        "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
    }