2012-07-16 124 views
3

我最近一直在考虑在我的.Net页面中使用EF,但在尝试访问设置的公共数据库时,我有点挣扎。实体框架和Oracle公共数据库链接

所以,例如在我的Oracle SQL开发人员,我将访问一个公共数据库这样

SELECT name FROM [email protected] 

我想这并不以下列方式使用此

Using myEntities As New TestEntities() 
    Dim allNames = From name In [email protected] 
        Select name 
    GridView1.DataSource = allNames 
    GridView1.DataBind() 
End Using 

显然工作,因为我的EF不包含公共服务器表,因为我不知道如何甚至将此添加到EF(如果这是有道理的?)

我很想知道是否有可能ach即使这样,如果没有人有任何想法访问这个最好的方法?

编辑

理想情况下,我想能够使用LINQ与我的公共数据库链接,如果这是可能的吗?

回答

2

您是否尝试过使用别名?

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

然后你可以写:

SELECT name FROM MyTable 

同义词的工作,但他们不会自动反向工程检测,所以你需要手动编辑.edmx文件,以使他们的工作。 Here is how to do it

另一种选择是去为代码优先的方法,并使用[表]注释,只是简单的写的代名词,而不是表的名称的名称

+0

感谢您的回答 - 我从来没有尝试过的同义词通过EF是这些访问的呢? – 2012-07-23 18:16:34

+0

他们似乎能够正常工作,但可悲的是,他们没有自动检测到,所以你需要手动编辑.edmx文件,使其工作 – Luxspes 2012-07-23 18:20:53

+0

哦,这是辉煌的,我会看看,看看我能得到那个工作,然后 - 谢谢 – 2012-07-23 18:48:48

2

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

  • 是一个快速可靠的链路连接两个数据库?缓慢的链接会减慢应用程序的响应时间。已知不耐烦的用户继续点击,直到发生什么事情...
  • 如果链接数据库上的事务失败,会有什么后果?整个交易失败还是足以让失败记录?
  • 写入其他数据库时我更喜欢使用Oracle高级队列,以便初始数据库上的事务完成,并且链接数据库上的事务可以分别处理和记录。这不会满足即时同步的要求,但通常要求一致性很快,而不是立即一致
  • 无论哪种方式,更新,插入和删除数据库链接上的操作最好在封装链接和隐藏的包中处理它来自实体框架。

编辑:如果您的连接不够稳定,那么使用高级队列更有意义。有关基础知识,请参阅dated article。把你的插入/删除/更新在队列中的应用程序的操作无需等待所链接的数据库上的二级交易成功确认完成

  • :通过使用队列你得到这些功能。
  • 队列被设置为跟踪数据库之间的事务尝试的次数
  • 操作的潜在复杂性不需要由应用程序代码处理。您可以让EF做它最擅长的事情:为数据库提供一个接口,而另一个需求链接到另一个数据库则由数据库负责。

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

如果您11g数据库上使用latest release您可以使用LINQ和Oracle没有实体框架。这个版本在这个日期仍然很新,所以你可能希望在生产平台上采用这个版本之前寻找其他用户的意见。

+0

感谢详细的解答 - 它是怎么回事涉及更新,删除等,所以一个看法不会完全解决这个问题。这个链接也有点碰撞和错过。所以如果我不使用EF,我仍然可以使用LINQ与Oracle? – 2012-07-17 09:16:09