如果 connectionString 错误(或根本缺失),如何防止 EF 创建 localdb

How to prevent EF to create localdb if connectionString is wrong (or missing at all)

我有一组模块(持久性、服务、mvc web、工具...)共享通用配置参数并允许对 app.environment/developer 中的特定 environment/developer 进行本地覆盖。config/web.config使用预生成事件的文件。

持久化模块基于 EF 6.1 Code First,采用默认初始化策略,即 CreateDatabaseIfNotExists.

一切正常,除了连接字符串错误或根本丢失并且执行 update-database 命令:如果是这种情况,EF 忽略错误连接字符串,以某种方式构建其拥有一个并在当前用户文件夹中静默创建一个新的 LocalDb 数据库。

如何防止这种行为?我想创建一个新数据库,但前提是存在有效的连接字符串。在无效的连接字符串上应该抛出异常。

如果您想更改默认行为,那么您应该更改默认连接工厂:

 <entityFramework>

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

      <parameters>

        <parameter value="v11.0" />

      </parameters>

    </defaultConnectionFactory>

  </entityFramework> 

因此,如果您不提供连接字符串,EF 会将其用作默认连接字符串。所以你可以很容易地改变它:

<entityFramework>

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">

      <parameters>

        <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True" />

      </parameters>

    </defaultConnectionFactory>

  </entityFramework>

more info.