如何获取当前的数据库初始化程序,以便在自动发布之前测试是否设置了正确的初始化程序?
编辑:我想创建一个测试用例来测试团队成员是否忘记删除这样的行:
Database.SetInitializer<SomeModel>(new DropCreateDatabaseAlways<SomeModel>());
但是没有像 Database.GetInitializer() 这样的方法或属性。
有没有办法获得当前的数据库初始化程序?
如何获取当前的数据库初始化程序,以便在自动发布之前测试是否设置了正确的初始化程序?
编辑:我想创建一个测试用例来测试团队成员是否忘记删除这样的行:
Database.SetInitializer<SomeModel>(new DropCreateDatabaseAlways<SomeModel>());
但是没有像 Database.GetInitializer() 这样的方法或属性。
有没有办法获得当前的数据库初始化程序?
如果您依靠开发人员记住提交或不提交一行,我认为您会犯这个错误。
您应该考虑通过在 web.config 或 app.config 中进行设置来将初始化与代码解耦。使用 web.config 转换或对 app.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 优先。