Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 在visual studio 2013和EF中添加多个oracle架构_Entity Framework_Oracle11g_Visual Studio 2013_.net 4.5_Odp.net Managed - Fatal编程技术网

Entity framework 在visual studio 2013和EF中添加多个oracle架构

Entity framework 在visual studio 2013和EF中添加多个oracle架构,entity-framework,oracle11g,visual-studio-2013,.net-4.5,odp.net-managed,Entity Framework,Oracle11g,Visual Studio 2013,.net 4.5,Odp.net Managed,我有一个严重的问题需要解决 在VS2013的服务器资源管理器中,我使用有效的用户和密码凭据建立了与数据库的连接 因此,我有一个名为:Connect1的模式,它需要访问另一个名为Connect2的模式,这两个模式都使用相同的数据源名称:Dev1。与我连接的用户称为Connect1,因此默认情况下,我连接到模式Connect1。我能够验证我是否具有此用户连接到Connect2的访问权限 通过使用ODP.NET托管驱动程序,我可以设置这个。正在放置所有连接详细信息 配置显示在此页面中: 为了允许查看

我有一个严重的问题需要解决

在VS2013的服务器资源管理器中,我使用有效的用户和密码凭据建立了与数据库的连接

因此,我有一个名为:Connect1的模式,它需要访问另一个名为Connect2的模式,这两个模式都使用相同的数据源名称:Dev1。与我连接的用户称为Connect1,因此默认情况下,我连接到模式Connect1。我能够验证我是否具有此用户连接到Connect2的访问权限

通过使用ODP.NET托管驱动程序,我可以设置这个。正在放置所有连接详细信息

配置显示在此页面中:

为了允许查看模式,我必须更改Filters选项卡,并添加我正在使用的所有相关模式(添加Connect2)。然后单击“更新”,我就可以将这些表使用到我的edmx文件中

但是,当我关闭Visual Studio时,问题就出现了。我的筛选器丢失,我的连接恢复为仅使用Connect1

然后,这将破坏edmx文件中的表映射,并执行一系列操作

错误11007:未映射实体类型“Table1”

这真的很令人沮丧,因为我不得不一次又一次地重复同样的过程,手动重新映射我的所有表


令人困惑的是,当我从服务器资源管理器更新数据连接以包含第二个架构时。。EF工作并检测表格;但我的应用程序配置和连接字符串尚未更改。因此,这让我相信,如果我要将我的项目推广到生产或测试阶段,它将崩溃,因为我的项目中没有任何东西可以表明需要Connect2。

好吧,我意识到一个从未正确解释过的大陷阱。如果您想在Oracle中使用EF,并且您正在使用另一种模式,我强烈建议大家遵循这一点

陷阱在于,自从我们将oracle的模式约定引入EDMX之后,就无法知道映射会变得多么不稳定。这对microsoft来说从来都不是问题的原因是SQL server中不存在模式。要在同一个edmx文件中实现两个数据库,有一些明显的预防措施禁止您添加任何表。在我们引入模式之后,它变得非常脆弱

因此,您必须遵循添加模式的步骤(正如我在问题中解释的)。转到Filter选项卡,以这种方式添加模式,然后单击Update按钮

一旦应用到服务器资源管理器,edmx将有权从该模式添加表。执行此操作时,EDMX会回忆其文件中嵌入的模式。因此,如果你关闭visual Studio,重新打开并运行该项目,它仍然可以工作

以下是您希望避免的几个技巧: 不要重命名任何实体和列(属性),即使这会使代码更具可读性。这是第一次。由于映射是非常不稳定的,如果您碰巧搞砸了,重新映射所有内容将是一件麻烦事

第二个,嗯,哦,当你关闭Visual Studio,再次打开它,忘记在服务器资源管理器中重新包含你的模式,转到edmx并执行“从数据库更新模型”以包含任何其他内容(但最重要的是……即使你什么都不做),然后单击“确定”,你的模型仍然会更新,无论是否发生更改,丢失以前所做的所有映射。这就是我所说的地图不稳定的意思

如果发生这种情况,你没有做第一个重命名实体或属性的工作。。就是删除所有已经存在的实体,然后重新添加它们

您希望删除所有实体的原因是,添加具有相同名称的新实体将添加具有相同名称+数字的新实体。所以类似于Customer实体的东西仍然存在,再次添加该实体将创建一个名为Customer1的新实体


唉。

顺便说一句,我花了3个小时做了一个关于查看的工作。视图将引入一个链接表,因此在Schema1中,我的视图将创建视图Customer作为Schema2.Customer中的select*。我会为所有的实体这样做。问题是这是一个只读文件。您将无法通过EF对其进行任何插入或更新,就像您将实际实体包括在内时那样。您也无法在ODP.NET中首先执行代码,因为这是不受支持的。您是否找到有关此主题的更多信息。我们面临着同样的问题,并且拥有大量的开发人员。正如您在我初次签入后提到的,除非我们重新创建连接字符串,否则它不会工作。事件后出现“实体未映射”错误。要求所有人删除并读取表格将是一场噩梦。哦,天哪,听到这个消息我很难过。。不幸的是,我找不到合适的工作,现在我很难做到这一点,因为我的职业已经从oracle转向了SQL Server。我不确定驱动程序更新是否解决了这个问题,或者新的visual Studio是否解决了这个问题。