首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为相同上下文的不同连接字符串设置不同的初始化器

为相同上下文的不同连接字符串设置不同的初始化器
EN

Stack Overflow用户
提问于 2012-12-09 14:12:11
回答 1查看 330关注 0票数 1

我首先使用EF5代码,并在配置中设置我的初始化器。我希望在一个应用程序中使用同一上下文类型的多个数据库。我的连接字符串如下所示:

代码语言:javascript
复制
<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"/>

我可以像这样在代码中使用我的上下文

代码语言:javascript
复制
var _contextProd = new MyContext("DatabaseProduction");
var _contextTest = new MyContext("DatabaseTest");

设置数据库初始化程序的通常方法是配置文件,如解释的这里所示。但据我所知,我可以在每个上下文的基础上设置初始化器,但不能为每个连接字符串设置一个。不对?

问题是:如何为测试数据库设置一个DropCreateAllwaysInitializer,同时在生产数据库上设置一个CreateDatabaseIfNotExistsInitializer

============编辑对格特的评论和清洁============的回应

我通常定义初始化器的方式是

代码语言:javascript
复制
<contexts>
  <context type=" Namespace.MyContext, MyAssembly">
    <databaseInitializer type="Namespace.MyCustomContextInitializer, MyAssembly" />
  </context>
</contexts>

当然,我可以在这里添加第二个<context...>,并为定义初始化器,另一个上下文。但是,如何区分在哪个连接字符串上使用哪个初始化程序呢?换句话说,我的问题是:

  1. 连接字符串不知道存在哪个上下文。
  2. 上下文(在上下文部分)不知道连接字符串的链接位置。
  3. 在后面的代码中,我告诉上下文要使用哪个连接字符串。
  4. 对于每个上下文类型,用于特定上下文的初始化程序似乎是某种静态的。

同样,如何为对上下文和连接字符串定义特定的初始化程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-10 08:37:57

我能想到的唯一方法是为每个连接字符串派生一个上下文:

代码语言:javascript
复制
public class MyProductionContext : MyContext
{
  public MyProductionContext()
    : base( "DatabaseProduction" )
  {
  }
}

代码语言:javascript
复制
public class MyTestContext : MyContext
{
  public MyTestContext()
    : base( "DatabaseTest" )
  {
  }
}

然后,您可以为每个派生上下文设置初始化器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13788155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档