我首先使用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");
设置数据库初始化程序的常规方法是配置文件,如here所述。但据我所知,我可以在每个上下文的基础上设置初始化程序,但不能为每个连接字符串设置初始化程序。错?
问题是:如何设置例如生产数据库上有DropCreateAllwaysInitializer
时,测试数据库是CreateDatabaseIfNotExistsInitializer
吗?
============编辑回答Gert的评论和澄清============
我通常定义初始化器的方式是
<contexts>
<context type=" Namespace.MyContext, MyAssembly">
<databaseInitializer type="Namespace.MyCustomContextInitializer, MyAssembly" />
</context>
</contexts>
我可以肯定在这里添加第二个<context...>
并为另一个上下文定义初始值设定项。但是如何判断哪个连接字符串使用哪个初始值设定项?换句话说,我的问题是:
同样,我如何为上下文和连接字符串定义特定的初始值设定项?
答案 0 :(得分:0)
我能想到的唯一方法是为每个连接字符串派生一个上下文:
public class MyProductionContext : MyContext
{
public MyProductionContext()
: base( "DatabaseProduction" )
{
}
}
和
public class MyTestContext : MyContext
{
public MyTestContext()
: base( "DatabaseTest" )
{
}
}
然后,您可以为每个派生的上下文设置初始值设定项。