【问题标题】:Entity framework and Oracle Public database links实体框架和 Oracle 公共数据库链接
【发布时间】:2012-07-16 15:02:23
【问题描述】:

我最近一直在考虑在我的 .Net 页面中使用 EF,但在尝试访问已设置的公共数据库时遇到了一些困难。

例如,在我的 Oracle SQL 开发人员中,我会像这样访问公共数据库

SELECT name FROM users@publicserver

我正在尝试通过以下方式使用它

Using myEntities As New TestEntities()
    Dim allNames = From name In myEntities.users@publicserver
                     Select name
    GridView1.DataSource = allNames
    GridView1.DataBind()
End Using

显然这不起作用,因为我的 EF 不包含公共服务器表,因为我不确定如何将它添加到 EF(如果这有意义?)

我很想知道是否有可能实现这一点,如果没有,是否有人对访问它的最佳方法有任何想法?

编辑

如果可能的话,我希望能够将 LINQ 与我的公共数据库链接一起使用?

【问题讨论】:

    标签: asp.net vb.net oracle entity-framework


    【解决方案1】:

    您是否尝试过使用同义词?

    CREATE SYNONYM [dbo].[MyTable] FOR [AnotherDatabase].dbo.[MyTable]
    

    然后你可以写:

    SELECT name FROM MyTable
    

    同义词有效,但不会自动检测到逆向工程,因此您需要手动编辑 .edmx 文件以使其正常工作。 Here is how to do it.

    另一种选择是采用 Code First 方法,并使用 [Table] 注释,只需简单地写同义词的名称而不是表的名称

    【讨论】:

    • 感谢您的回答 - 我之前从未尝试过同义词,那么这些可以通过 EF 访问吗?
    • 它们似乎可以正常工作,但遗憾的是,它们不会被自动检测到,因此您需要手动编辑 .edmx 文件才能使其正常工作
    • 哦,那太好了,我会看看,看看我能不能让它工作 - 谢谢
    • EDMX 是否可以自动填充列?
    • 同义词?不,您当然可以创建一个“相似”的表并从中进行逆向工程......
    【解决方案2】:

    如果您只是从另一个数据库中选择数据,则创建一个视图并将其包含在您的表和视图列表中。 如果你想更新、插入或删除数据库,那么你需要考虑几个问题:

    • 两个数据库是否通过快速可靠的链接连接?慢速链接会减慢您的应用程序响应时间。众所周知,不耐烦的用户会一直点击直到发生某些事情...
    • 如果链接数据库上的事务失败会有什么后果?整个事务应该失败还是足以记录失败?
    • 当写入不同的数据库时,我更喜欢使用 Oracle 高级队列,以便完成初始数据库上的事务,并且可以单独处理和记录链接数据库上的事务。这不符合即时同步的要求,但通常要求是尽快保持一致,而不是立即保持一致
    • 无论哪种方式,数据库链接上的更新、插入和删除操作都最好在封装链接并将其隐藏在实体框架中的包中处理。

    编辑:如果您的连接不像您希望的那样稳定,那么使用高级队列会更有意义。基本见dated article。通过使用队列,您可以获得以下功能:

    • 通过将插入/删除/更新放在队列中,应用程序中的操作可以完成,而无需等待确认链接数据库上的辅助事务已成功。
    • 设置队列以跟踪数据库之间的事务尝试了多少次
    • 操作的潜在复杂性不需要由应用程序代码处理。您可以让 EF 做它最擅长的事情:提供数据库接口,而您的其他需求(链接到另一个数据库)由数据库处理。

    所有的 CRUD 操作都可以封装在 EF 可以使用的数据库包中。

    如果您在 11g 数据库上使用 latest release,则可以在没有实体框架的情况下使用 LINQ 和 Oracle。到目前为止,此版本仍然是全新的,因此您可能需要先征求其他用户的意见,然后再在生产平台上采用此版本。

    【讨论】:

    • 感谢您的详细回答 - 这将涉及更新、删除等,因此视图无法完全解决此问题。链接也有点命中注定。那么,如果我不使用 EF,我仍然可以将 LINQ 与 Oracle 一起使用吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多