Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与不同数据库兼容的实体框架DbContext_C#_Entity Framework 5_Dbcontext - Fatal编程技术网

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

C# 与不同数据库兼容的实体框架DbContext,c#,entity-framework-5,dbcontext,C#,Entity Framework 5,Dbcontext,使用实体框架,我创建了一个应用程序,它能够从它所建模的数据库中读取数据。我现在有了另一个数据库,具有相同的表,托管在另一台服务器上 问题是,第二个数据库上的表属于一个与原始数据库名称不同的模式,因此在app.config文件中简单地更改我的上下文的连接字符串是行不通的。(我得到错误“表或视图不存在”)。在自动生成的代码中,必须有一些映射来声明原始架构名称 处理这种情况的正确方法是什么? 我真的不想重新建模第二个数据库,因为它与第一个数据库相同。 我无法更改数据库,因为其他应用程序将停止工作 任何

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

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

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


任何朝正确方向的轻推都将不胜感激。

好的,下面是我为解决这个问题所做的工作

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

出于以下几个原因,这让人感觉不对劲:

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

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

  • 解决方案是首先使用代码和Fluent API在派生的DbContext类中的OnModelCreating事件中编辑模型配置

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

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


    以纯文本形式查看edmx文件。是的,这证实了我的想法,其中有对第一个数据库模式的引用。有没有办法通过配置驱动模式名?