4

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

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

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

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

配置显示在此页面中:

使用适用于 Visual Studio 的 Oracle 开发人员工具

为了允许查看架构,我必须更改过滤器选项卡,并添加我正在使用的所有相关架构(添加 Connect2)。然后我点击更新,我就可以在我的 edmx 文件中使用这些表了。

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

然后这会破坏我的 edmx 文件中的表映射,其中包含一系列

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

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

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

4

1 回答 1

7

好的,我意识到从未正确解释过的大陷阱。如果您想将 EF 与 Oracle 一起使用并且您正在使用另一个模式,我强烈敦促人们遵循这一点。

陷阱在于,由于我们将 oracle 的模式约定引入 EDMX,因此无法知道映射会变得多么不稳定。这对微软来说从来不是问题的原因是因为在 SQL Server 中没有架构这样的东西。要在同一个 edmx 文件中实现两个数据库,有一些明显的预防措施会阻止您添加任何表。在我们引入模式之后,它变得非常脆弱。

因此,您要做的就是按照添加模式的步骤进行操作(正如我在问题中所解释的那样)。转到过滤器选项卡,以这种方式添加模式,然后单击更新按钮。

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

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

第二个呃-哦,是当你关闭 Visual Studios,再次重新打开它,忘记在服务器资源管理器中重新包含你的架构,转到 edmx 并执行“从数据库更新模型”以包含其他任何内容(但最重要的是......即使你什么都不做)然后你点击确定,你的模型仍然会更新,不管没有变化,丢失你之前做的所有映射。这就是我所说的地图易变的意思。

如果发生这种情况,并且您没有重命名实体或属性的第一个呃-哦..是删除所有已经存在的实体,然后重新添加它们。

之所以要删除所有实体,是因为添加新的同名实体会添加一个新的同名实体+一个数字。所以像客户实体之类的东西仍然存在,再次添加实体将创建一个名为 Customer1 的新实体。

叹。

于 2014-02-21T02:54:21.710 回答