实体框架DataContext到Oracle数据库

时间:2013-12-03 10:27:00

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

我目前正在开发一个具有本地SQL数据库的MVC4应用程序,但还需要连接到Oracle数据库以获取一些东西......

现在,我有MVC和EF的经验,但我对Oracle缺乏了解。

经过漫长的早上搜索和试用,错误和帮助我设法使用“常规”方式连接到oracle数据库,打开新的OracleConnection(connString)并使用OracleCOmmand执行SQL。所以我知道我的connectionstring是正确的,数据库是可访问的。

我希望我可以创建一个DataContext类,并使用我的工作连接字符串,当我这么做时,EF可以开箱即用

using (var ctx = new OracleContext())
{
   var test = ctx.People.ToList();
}

但是,现在我收到一条关于从“get_ProviderFactory”返回的null的错误。是否需要一些额外的步骤才能让EF工作?

如果您需要任何额外信息,我很乐意提供这些信息!

提前致谢!

1 个答案:

答案 0 :(得分:2)

是的,我想出了这个...所以这是我解决这个问题的方式以供将来参考......

首先,为了测试数据提供程序出了什么问题,我在应用程序的开头某处使用了这段代码:

DataTable dataTable = DbProviderFactory.GetFactoryClasses();

这给了我一个DataTable来检查。在Rows-property中它显示了5个不同的Dataproviders(OleDB,SQL等),我的5号是我安装的Oracle Dataprovider。这告诉我,我安装了正确的提供程序(只是因为它在那里),但它是Oracle.ManagedDataAccess.Client,而不是Oracle.DataAccess.Client ...所有SO帖子和互联网从未告诉我关于这个管理的......

因此,通过添加Oracle.ManagedDataAccess dll,将copylocal设置为false并将其引用到应用程序(在GAC中我也可以猜测)并更改了connectionstring中的connectionsName属性,使其成为一个简单的修复。 web.config到

providerName="Oracle.ManagedDataAccess.Client"

如果您没有在dataTable中安装OracleProvider但是您确定已安装它,则可能没有将其添加到您的machine.config中。您可以将其添加到web.config root:

<system.data>
    <DbProviderFactories>
      <add name="ODP.NET Managed Driver"
           invariant="Oracle.ManagedDataAccess.Client"
           description="Oracle Data Provider for .NET, Managed Driver"
           type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess,
           Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>

(猜测也可以用它来在没有Provider dll的机器上部署它,只要你将Dll与应用程序一起部署)

希望这有助于未来的访客!