EF 4.3+如何获取当前数据库初始化程序

时间:2012-10-17 11:50:24

标签: c# entity-framework

如何获取当前数据库初始化程序,以便在自动发布之前测试是否设置了正确的数据库初始化程序?

编辑:我想创建一个测试用例,测试团队成员是否忘记删除这样的行:

Database.SetInitializer<SomeModel>(new DropCreateDatabaseAlways<SomeModel>());

但没有像Database.GetInitializer()这样的方法或属性。

有没有办法获取当前的数据库初始化程序?

1 个答案:

答案 0 :(得分:1)

如果您依赖开发人员记住提交或不提交一行,我认为您错了。

您应该考虑通过在web.config或app.config中设置初始化与代码来解耦。对于app.config使用web.config转换或SlowCheetah,每个配置都有一个转换,例如:调试,测试,生产。

在Web.Debug.Config中,您可以指定要用于该配置的初始化程序:

  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <contexts>
      <context type="Company.Product.Infrastructure.BoundedContext, Company.Product.Infrastructure" disableDatabaseInitialization="false" xdt:Transform="Replace">
        <databaseInitializer type="Company.Product.Infrastructure.DatabaseInitializers.DebugDatabaseInitializer, Company.Product.Infrastructure" />
      </context>
    </contexts>
  </entityFramework>

对于其他配置,您将替换上述配置中的//entityFramework/contexts/context/databaseInitializer/@type以使用其他数据库初始化程序。这将允许您使用DropCreateDatabaseAlways进行调试,使用DropCreateDatabaseIfModelChanges进行测试并禁用生产的初始化。

作为测试,我尝试在代码和.config中添加数据库初始化,并且.config优先。