我使用 EF5 代码优先并在配置中设置我的初始化程序。我想在一个应用程序中使用多个相同上下文类型的数据库。我的连接字符串如下所示:
<add name="DatabaseProduction" connectionString="Server=localhost; Database=DatabaseProduction; User Id=***; password=***" providerName="System.Data.SqlClient"/>
<add name="DatabaseTest" connectionString="Server=localhost; Database=DatabaseTest; User Id=***; password=***" providerName="System.Data.SqlClient"/>
我可以像这样在代码中使用我的上下文
var _contextProd = new MyContext("DatabaseProduction");
var _contextTest = new MyContext("DatabaseTest");
设置数据库初始值设定项的常规方法是这里解释的配置文件。但据我了解,我可以在每个上下文的基础上设置初始化程序,但不能为每个连接字符串设置一个。错误的?
问题是:如何在生产数据库上设置例如DropCreateAllwaysInitializer
测试CreateDatabaseIfNotExistsInitializer
数据库?
============ 编辑回答格特的评论并澄清 ============
我通常定义我的初始化程序的方式是
<contexts>
<context type=" Namespace.MyContext, MyAssembly">
<databaseInitializer type="Namespace.MyCustomContextInitializer, MyAssembly" />
</context>
</contexts>
我当然可以在这里添加第二个并为另一个上下文<context...>
定义初始化程序。但是如何判断在哪个连接字符串中使用了哪个初始化器呢?换句话说,我的问题:
- 连接字符串不知道存在哪个上下文。
- 上下文(在上下文部分)不知道它链接到哪个连接字符串
- 在后面的代码中,我告诉上下文要使用哪个连接字符串
- 特定上下文的初始化器似乎对于每种上下文类型都是静态的。
同样,我如何为一对上下文和连接字符串定义一个特定的初始化程序?