【发布时间】:2018-12-18 05:55:26
【问题描述】:
我在实现基本概念验证工作时遇到了很多麻烦,其中我通过 Entity Framework (6.2) 通过 Azure Functions 访问 Oracle DB (11g)。
先决条件: 已安装 ODT For Visual Studio 2017,以及 Azure Functions CLI/Core Tools。下面提到的所有内容都完全通过 Visual Studio 2017 完成,而不是通过 Azure 门户。
第 1 次:
使用 Azure Functions 模板创建了一个新项目。
已安装 NuGet 包 EntityFramework (6.2.0)、Oracle.ManagedDataAccess (12.2.1100) 和 Oracle.ManagedDataAccess.EntityFramework (12.2.1100)。注意:使用 Azure Functions 模板在项目中安装 NuGet 包时,这些包将添加到 Dependencies -> NuGet 下,而不是 References 下。
向项目添加了 ADO.NET 实体数据模型。
问题:设置我的连接字符串后,选择Entity Framework 6.x不可用,报错如下:
与最新版本兼容的实体框架数据库提供程序 找不到您的数据的实体框架版本 联系。如果您已经安装了兼容的提供程序, 确保在执行此操作之前已重建项目。 否则,退出此向导,安装兼容的提供程序,然后 在执行此操作之前重建您的项目。
作为最简单的解决方法,我尝试继续使用 EF5,但它在创建 DB 模型时抛出异常(在选择要包含在模型中的对象,包括一些存储过程之后)。
采取 2:
如上创建项目并安装 NuGet 包。
创建类库项目以促进 Oracle 交互。
在类库项目中安装了与上面相同的 NuGet 包。
在类库项目中添加了 ADO.NET 实体数据模型,并在数据库模型中添加了一些数据库对象。还为特定连接字符串的模型添加了自定义构造函数,因为在 Azure Functions 中管理连接字符串是一组单独的难题,我将在稍后处理。
向类库项目添加了一个简单的包装方法,该方法从数据库模型中调用存储过程:
public static string NameByEmpNo(int empNo)
{
string result;
MyEntities entities = new MyEntities("metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|res://*/MyEntities.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string='DATA SOURCE=127.0.0.1:1521/ORCL;PASSWORD=tiger;USER ID=SCOTT'");
ObjectParameter name = new ObjectParameter("o_empname", typeof(string));
entities.GET_EMP_NAME_PROC(empNo, name);
result = (string)name.Value;
return result;
}
在 Azure Functions 项目中添加了对类库的引用。
添加了调用 NameByEmpNo 的函数:
[FunctionName("GetNameByEmpNo")]
public static async Task<HttpResponseMessage> GetNameByEmpNo([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]HttpRequestMessage req, TraceWriter log)
{
int empNo = Int32.Parse(req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "empno", true) == 0)
.Value);
string empName = ScottAccess.NameByEmpNo(empNo);
return req.CreateResponse(HttpStatusCode.OK, "Employee name: " + empName);
}
问题:在运行时,调用函数失败并出现此错误 消息:
执行函数时出现异常:GetNameByEmpNo -> ADO.NET 具有不变名称“Oracle.ManagedDataAccess.Client”的提供程序是 未在机器或应用程序配置文件中注册,或 无法加载。有关详细信息,请参阅内部异常。 -> 无法 找到请求的 .Net Framework 数据提供程序。它可能不是 已安装。
额外信息:我的类库在通过控制台应用程序调用时可以完美运行。此外,在调用不使用我的类库的函数时,我的 Azure Functions 应用也能完美运行...
我被难住了。有没有人有让这种技术组合一起工作的经验,并且可以提供一些关于我哪里出错/提供使基本连接正常工作的步骤的见解?
【问题讨论】:
标签: visual-studio entity-framework oracle11g azure-functions ef-database-first