实体框架DbContext与不同的数据库兼容

时间:2013-04-26 07:56:21

标签: c# entity-framework-5 dbcontext

使用Entity Framework,我创建了一个应用程序,它能够从建模的数据库中读取数据。我现在有另一个数据库,具有相同的表,托管在另一台服务器上。

问题是第二个数据库上的表属于一个与原始数据库名称不同的模式,因此只需在app.config文件中更改我的上下文的连接字符串就不起作用了。 (我得到错误“表或视图不存在”)。在自动生成的代码中某处必须有一些映射,说明原始模式名称。

处理这种情况的正确方法是什么? 我真的不想重新建模第二个数据库,因为它与第一个数据库完全相同。 我无法更改数据库,因为其他应用程序将停止工作。

非常感谢任何正确方向的推动。

1 个答案:

答案 0 :(得分:0)

好的,所以这就是我为解决这个问题所做的一切。

正如@Kelmen在评论中提到的,在文本编辑器中打开EDMX文件显示这是存储架构信息的地方。所以我想我可以简单地清除schema属性的值并使用连接字符串来驱动架构。

由于以下几个原因,这感觉不对:

  1. 如果模型在任何时候刷新,它可能已经重新填充了模式名称,这将非常令人讨厌。我没有时间测试这是否真的会发生。

  2. 如果我确实需要在运行时更改模式名称,则此方法不允许我控制模式名称。

  3. 解决方案是使用Code First和Fluent API在我派生的DbContext类中的OnModelCreating事件中编辑模型配置。

    我现在正在考虑修改我的上下文类,以便我可以传递模式的名称或者可能从我的app.config驱动它。

    我发现链接教程非常有用:

    Change Schema of Entity Framework

    Entity Framework Change Schema Name Per Connection