实体框架7 - 迁移:如何仅为迁移指定数据库提供程序和连接字符串

时间:2016-05-19 13:50:58

标签: entity-framework

有没有办法指定哪个DataProvider(SQL Server)和ConnectionString仅用于生成迁移(Add-Migration)和更新数据库(Update-Database)?我不想将数据提供程序选择和连接字符串加载硬编码到DbContext(.UseSqlServer())中。

我认为EF6可以直接从web.config中选择连接字符串,在EF7中是否有类似内容?

1 个答案:

答案 0 :(得分:1)

不,你必须使用optionsBuilder:

示例:

string oldConnectionString =@"Server = .\;Initial Catalog=EFTutorial; AttachDbFilename=|DataDirectory|\EFTutorial.mdf; Trusted_Connection = True; MultipleActiveResultSets = true";

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer(oldConnectionString );
    base.OnConfiguring(optionsBuilder);
}

您也可以加载为json并直接从app.config或web.config加载。

如果您使用的是.Net Core:

您可以在appsettings.json中定义连接字符串,如下所示:

{
  {
     ....

  },
  "Data": {
           "ConnectionString": "..."   
  }
}

在应用程序启动时你必须加载它:

// Set up configuration sources.
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
builder.AddEnvironmentVariables();
Configuration = builder.Build().ReloadOnChanged("appsettings.json");

之后,您还必须在Startup.cs中配置实体框架。

public void ConfigureServices(IServiceCollection services)
{
  ...
  services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<AppContext>(options =>
 { 
                     options.UseSqlServer(Configuration "Data:ConnectionString"]); });
        services.AddScoped<AppContext, AppContext>();

        ...
  }
}

这里有重要的事情:

services.AddScoped((_) => new AppContext(Configuration["Data:DefaultConnection:ConnectionString"]));

https://docs.asp.net/en/latest/data/entity-framework-6.html

在Entity Framework Core 1.0 / 7中识别字符串的示例: https://docs.asp.net/en/latest/fundamentals/configuration.html

旧的方法(你也可以用EF Core做到这一点)我们从App.config或web.config加载了conenctionString 通过迁移过程Add-Migration / Update-Database,EF将自动找到Connection字符串。 但您也可以在NuGet comamnd行中为Add-Migration提供conenction字符串作为参数。

我希望这能解决你的问题!