Jos*_*ell 2 c# oracle entity-framework odp.net arcgis
每当我尝试运行此查询时,都会收到以下错误:
var query = from u in StageEntity.STAGINGINTERACTIONPOINTS
where u.OBJECTID == OBJECT_ID
select u;
"Schema specified is not valid. Errors: \r\nStagingDB.ssdl(2,2) : error 0152:
No Entity Framework provider found for the ADO.NET provider
with invariant name 'Oracle.ManagedDataAccess.Client'.
Make sure the provider is registered in the 'entityFramework'
section of the application config file.
See http://go.microsoft.com/fwlink/?LinkId=260882 for more information."
Run Code Online (Sandbox Code Playgroud)
但是,我认为的问题是我无法在运行时访问配置文件。这是因为我的应用程序是 ArcObjects 扩展并且由于某种原因忽略了所有不是 Config.esriaddinx 的配置文件。因此在运行时,我从配置文件中获取连接字符串。
这适用于 SQL 服务器,但我之前没有在 Oracle 中尝试过。我想知道是否需要在运行时包含和声明某些内容才能使 Oracle ODP 正常工作。
这是我拉取并调用的连接字符串:
connection string="DATA SOURCE=(DESCRIPTION=(ADDRESS= (PROTOCOL=TCP) (HOST=examplehost.com)(PORT=1234))(CONNECT_DATA=(SID = sid)));PASSWORD=hunter2;PERSIST SECURITY INFO=True;USER ID=poor_username""
Run Code Online (Sandbox Code Playgroud)
然后,每当我声明一个我制作部分类的实体时,我都会调用这个连接字符串
我还查看了另一个有类似问题的堆栈问题,但我正在运行最新的 ODP.net (v 6.121) 和 Entity 6,它应该是兼容的。
此外,以下修复:
public partial class StagingEntities : DbContext
{
private volatile Type _dependency;
public StagingEntities(string connectionString)
: base(connectionString)
{
_dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
}
Run Code Online (Sandbox Code Playgroud)
不起作用。
小智 5
您的解决方案: 请为 Oracle.ManagedDataAccess.Client- https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/重新安装 NuGet 包
额外信息: 我遇到了完全相同的问题,但对于 Oracle.DataAccess.Client。我的问题是:“未找到具有不变名称‘Oracle.DataAccess.Client’的 ADO.NET 提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的‘entityFramework’部分注册。请参阅http://前往.microsoft.com/fwlink/?LinkId=260882了解更多信息。 ”。
我最近从 EF5 迁移到 EF6。旧版本的Oracle Managed ODP与 EF6 不兼容。安装Oracle.ManagedDataAccess.EntityFramework 后,我必须将项目中所有出现的Oracle.DataAccess.Client替换为Oracle.ManagedDataAccess.Client。它工作得很好。