我首先使用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...>,并为定义初始化器,另一个上下文。但是,如何区分在哪个连接字符串上使用哪个初始化程序呢?换句话说,我的问题是:
同样,如何为对上下文和连接字符串定义特定的初始化程序?
发布于 2012-12-10 08:37:57
我能想到的唯一方法是为每个连接字符串派生一个上下文:
public class MyProductionContext : MyContext
{
public MyProductionContext()
: base( "DatabaseProduction" )
{
}
}和
public class MyTestContext : MyContext
{
public MyTestContext()
: base( "DatabaseTest" )
{
}
}然后,您可以为每个派生上下文设置初始化器。
https://stackoverflow.com/questions/13788155
复制相似问题