4

中添加多个oracle架构我有一个严重的问题需要解决。在visual studio 2013和EF

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

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

使用ODP.NET托管驱动程序,我能够设置它。把所有的连接细节。

配置显示在这个页面:

Using Oracle Developer Tools for Visual Studio

为了让模式来看待,我不得不改变过滤器选项卡,并添加所有我使用了相关的架构(添加CONNECT2)。然后我点击更新,我可以将这些表格放入我的edmx文件中。

但是,当我关闭Visual Studios时会出现问题。我的过滤器会丢失,并且我的连接恢复为仅使用Connect1。

这就破坏了我的表映射在我的EDMX文件用一系列

错误11007的:没有映射

这真是令人沮丧,因为我必须不断重复的实体类型“表1”一遍又一遍的手动重新映射我所有的表。

令人困惑的是,当我从服务器资源管理器更新数据连接以包含第二个模式时。EF工作并检测表;但我的应用程序配置和连接字符串没有改变。因此,这让我相信,如果我要将我的项目推广到生产或测试,那么它会中断,因为我的项目中没有任何内容表明需要Connect2。

回答

6

好吧,我意识到这个从未解释过的大错误。如果您想要使用EF和Oracle,并且您正在使用其他模式,我强烈建议大家遵循这一点。

问题在于,自从我们将Oracle的模式约定引入到EDMX以来,没有办法知道映射会变得多么不稳定。这对于微软来说从未成为问题的原因是因为在SQL服务器中没有这样的模式。要在同一个edmx文件中实现两个数据库,有一些可见的预防措施会阻止您添加任何表。在我们引入模式之后,它变得非常脆弱。

所以你需要做的是按照添加架构的步骤(正如我在问题中解释的)。转到过滤器选项卡,以这种方式添加模式,然后单击更新按钮。

一旦将其应用于服务器资源管理器,edmx将有权从该模式添加表。当你这样做的时候,EDMX已经回忆了嵌入在其文件中的模式。因此,如果您曾经关闭过视觉工作室,然后重新打开并运行该项目,它仍然可以工作。

以下是您想要避免的几个提示: 尽管它使您的代码更具可读性,但不要重命名任何实体和列(属性)。这是第一个哦 - 哦。由于映射非常不稳定,如果您碰巧搞砸了,重新映射所有内容将会很麻烦。

第二个uh-oh,是当你关闭Visual Studios时,重新打开它,忘记在服务器资源管理器中重新包含你的模式,转到edmx并执行“从数据库更新模型”以包含任何其他内容(但最重要的是即使你不做任何事情)并且你点击确定,你的模型仍然会更新,不管是否有更改,都会丢失先前所做的所有映射。这就是我所说的地图是不稳定的。

在这种情况下,你没有做的第一嗯,哦重命名实体或属性的..是删除所有的实体已经存在,并重新添加。

为什么要删除所有实体的原因是因为添加新的具有相同名称将添加一个新的实体,具有相同名称+一个数字。因此,类似Customer的实体仍然存在,再次添加实体将创建一个名为Customer1的新实体。

感叹。

+0

顺便说一句,我花了3小时,周围的工作做观。视图会带来一个链接表,因此在Schema1中,我的视图将创建视图Customer作为来自Schema2.Customer的select *。我会为所有实体做到这一点。这是一个只读的问题。您将无法通过EF进行任何插入或更新,就像您将包含实际实体一样。 – sksallaj

+0

您也不能先在ODP.NET中执行代码,因为这不受支持。 – sksallaj

+0

你有没有在这个问题上找到更多。我们面临同样的问题,并有很多开发人员。正如你在我的初始签入后提到的,除非我们重新创建连接字符串,否则它不起作用。事件发生后,“实体未映射”错误。要求每个人删除和读取表格将是噩梦。 – skjagini