启用代码优先迁移时,在Web.config中使用连接字符串

时间:2014-05-05 05:15:48

标签: entity-framework code-first ef-migrations

我在Web.config中有多个连接字符串(对于应该具有完全相同模式的数据库),我的DbContext会动态初始化连接字符串:

public MyDbContext(string connectionStringName) : base(connectionStringName)
{

}

我没有MyDbContext的默认构造函数,因为在我的情况下它没有意义。我根据每个实体的Id值(自定义分片)决定使用哪个连接字符串。

我正在尝试为enable-migrations运行DbContext,但我收到以下错误:

The target context 'MyDbContext' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory.

我见过IDbContextFactory的示例实现,如下所示:

public class MyDbContextFactory : IDbContextFactory<MyDbContext>
{
    public MyDbContext Create()
    {
        return new MyDbContext("connectionStringName");
    }
}

这对我有什么帮助?连接字符串是否仍然是硬编码的?如何为每个数据库添加迁移?

3 个答案:

答案 0 :(得分:3)

如何为该DbContext提供默认的构造函数,然后在调用脚本add-migration和update-database时,可以使用-Co​​nnectionStringName和-ConnectionProviderName属性指向要使用的数据库。

顺便说一句 - enable-migrations脚本没有做太多 - 它将Migrations文件夹添加到您的项目和Configuration类。你可以自己做。

答案 1 :(得分:0)

最佳选择是使用单独的文件,您将在其中提及针对连接的Id值列表,例如在

<connectionStrings>
     <add name="MyConn1"
          connectionString="#your connection string"
      />

     <add name="MyConn2"
          connectionString="#your connection string"
      />

然后在

<appSettings>
      <add key="MyConn1" value="entity1,entity2" />
      <add key="MyConn2" value="entity3,entity4" />
</appSettings>

然后在一些全局变量

中动态加载连接字符串
public MyDbContext() : base(MyConnectionManager.connectionStringName)
{

}

答案 2 :(得分:0)

你也可以使用IoC。看一下示例代码。

https://github.com/aamir-poswal/CodeSample

特别是
- Bootstrapper.cs
- CRMContext.cs
- 您需要在上下文中自定义的DatabaseFactory.cs