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

本文关键字:数据库 框架 DbContext 实体 | 更新日期: 2023-09-27 18:10:55

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

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

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

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

好的,下面是我解决这个问题的方法。

正如@Kelmen在评论中提到的,在文本编辑器中打开EDMX文件会发现这就是模式信息的存储位置。因此,我认为我可以简单地清除schema属性的值,并使用连接字符串来驱动模式。

这感觉不对,有几个原因:

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

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

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

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

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

更改实体框架模式

实体框架每连接更改模式名称