【问题标题】:In Entity Framework, how to generate entities from different Oracle schemas in VS2017在Entity Framework中,如何在VS2017中从不同的Oracle schemas生成实体
【发布时间】:2018-01-17 06:41:20
【问题描述】:

我目前正在尝试从 Entity Framework 6 中的现有 Oracle 12 数据库中的表生成代码。我遇到的问题是,虽然它能够在我登录环境时看到我拥有的架构,但 Entity框架似乎看不到我有权访问的任何其他架构。

如何更改它以便我可以看到另一个架构?

我使用过实体框架模型优先和代码优先。我可以手动更改我在 Oracle 中拥有的生成表上的模式,它会起作用,但这意味着从我自己的模式中的其他模式生成我自己的表版本,以便能够通过实体使用它们框架。

否则,从所有现有表中生成所有代码将是一项繁琐的工作。

我该如何解决这个问题?

【问题讨论】:

  • 我认为 EF 在这个阶段不支持模式。一种解决方法是在您拥有的架构中创建同义词返回到其他表。
  • [Table("TableName", Schema = "MyOtherSchema")] class MyEntityTypeName { ... }?
  • OnModelCreating 内部调用modelBuilder.HasDefaultSchema("MyOtherSchema") 以获得一些默认值。但也许我还不了解您的实际工作流程......
  • 在相关问题列表中找到,也许会有所帮助stackoverflow.com/questions/7422275/…

标签: c# oracle entity-framework entity-framework-6 odp.net-managed


【解决方案1】:

好的,我已经解决了这个问题。有一种特殊的方法可以让架构在实体框架中与 Oracle 一起工作,并且您可以充分利用实体框架,包括 Designer/Canvas(如果需要)。

首先,在您的应用程序中,使用 Nuget 安装 Oracle.ManagedDataAccess.EntityFramework 包。如果你在 Nuget 中查看这个包的描述,它说它依赖于 EntityFramework 和 Oracle.ManagedDataAccess。所以安装一个包,它会安装所有的,如果它丢失了。

接下来,如果您阅读该描述底部的注释,它会显示“注意:实体框架设计时功能和其他 Visual Studio 需要从 http://otn.oracle.com/dotnet 下载的 32 位 Oracle Developer Tools for Visual Studio Studio 设计器,例如 TableAdapter 向导。此 NuGet 下载不启用设计时工具,仅启用运行时支持。”

因此,您需要安装与您的环境相匹配的 Oracle Tools for Visual Studio。安装 ODTwithODAC 包不会给你正确的结果。

最后,添加到 Oracle 数据库的连接。然后,打开服务器资源管理器并找到该连接。右键单击连接,然后选择过滤器。然后选择显示的模式。通过单击“...”按钮并选择模式来编辑值,添加要显示的所有模式。然后单击更新。然后点击确定。

下次您想从刚刚添加的架构中选择一个对象时,它将出现在实体框架列表中。

【讨论】:

  • 在服务器资源管理器中,当您选择添加新数据连接时,当您将数据源更改为 Oracle 时,请确保从数据提供程序下拉列表中选择 ODP.NET,托管驱动程序。如果不这样做,您最终会得到错误的 Oracle 服务器数据连接,并且体验会非常差,而且无法轻松选择模式。
  • 谢谢@tone。我想补充一点,集合下拉列表应该在默认的“连接”上,“显示的架构”是一个属性,可以在下面的过滤条件表中找到。
  • 我仍然无法让它工作,aaaaargh。我可以从服务器资源管理器调整架构。但是当我想使用这个连接来创建一个新的 ADO.NET 模型时,它仍然使用了错误的模式。我还尝试使用正确的过滤器删除/重新创建连接。 (我用的是Visual Studio 2019,其余都一样)
  • 它有效。将其他模式添加到连接而不是替换它很重要。 (stackoverflow.com/questions/7422275/…)
  • 非常感谢您的启发性回答!我为此苦苦挣扎了很长时间,并认为必须有一种更复杂的方法来做到这一点,例如手动编辑文件或覆盖实体实例化中的某些内容或类似的方法。但这就像在连接本身上选择过滤器一样简单 - 几乎很棒:D
猜你喜欢
  • 2011-11-17
  • 2011-10-30
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
相关资源
最近更新 更多