entity-framework – 如何调用Oracle函数,使用LINQ to Entities
发布时间:2020-12-12 16:24:57 所属栏目:百科 来源:网络整理
导读:我正在开发一个从Oracle 11g数据库访问数据的应用程序.我正在使用EF4,使用LINQ访问数据. 我遇到过需要调用存储在包中的函数的场景.此函数还具有返回值.我已将此函数添加到实体数据模型,但无法对其执行“添加函数导入”.因此我无法使用LINQ访问它. 如何调用此
我正在开发一个从Oracle 11g数据库访问数据的应用程序.我正在使用EF4,使用LINQ访问数据.
我遇到过需要调用存储在包中的函数的场景.此函数还具有返回值.我已将此函数添加到实体数据模型,但无法对其执行“添加函数导入”.因此我无法使用LINQ访问它. 如何调用此函数并获得它的返回值? 我不久前问过这个问题,但还没有得到任何答案.无论如何,我正在更新它的一些细节,以便其他人了解问题并引导我朝着正确的方向前进.我试图实现这个question中提出的解决方案,但我得到了例外. 我已将以下内容添加到我的实体数据模型的designer.cs文件中: [EdmFunction("TestModel.Store","TestFunction")] public int TestFunction(decimal ALNR,decimal ATID,decimal AUKENR) { throw new ApplicationException(); } 以下是edmx文件的一小部分: <edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx"> <!-- EF Runtime content --> <edmx:Runtime> <!-- SSDL content --> <edmx:StorageModels> <Schema Namespace="TestModel.Store" Alias="Self" Provider="Oracle.DataAccess.Client" ProviderManifestToken="11g" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl"> <Function Name="TestFunction" ReturnType="number" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" StoreFunctionName="PKG_TURNUS.SUMUKE" Schema="SYSTEM"> <Parameter Name="ATID" Type="number" Mode="In" /> <Parameter Name="ALNR" Type="number" Mode="In" /> <Parameter Name="AUKENR" Type="number" Mode="In" /> </Function> 以下是我调用此函数的方法: var selectQuery = from T in _context.Table1 join A in _context.Table2 on T.columnA equals A.columnB join TU in _context.Table3 on T.columnC equals TU.columnD where T.columnD == 5 && T.columnE == someVariable select new someType { propertyA = A.columnG,propertyB = _context.TestFunction(T.columnE,A.columnF,TU.columnH) }; 但是,当我执行以下任何操作时: ObservableCollection<someType> weekTotaldata = new ObservableCollection<someType>(selectQuery); //Exception thrown at runtime 要么 foreach (var ttu in selectQuery) //Exception thrown at runtime { double testval = ttu.propertyB; } 我得到了该函数“ApplicationException”中抛出的异常.不应该这样 我究竟做错了什么?如何从Linq-To-Entities调用oracle函数?请注意,我尝试调用的函数不是内置的oracle函数,而是用户定义的函数. 至于我使用Oracle使用EF4,功能导入似乎不适用于此.几个月前我遇到了同样的问题并尝试了很多方法来导入一个功能,但没有任何运气.但在搜索过程中,我在OTN上找到了一个链接,指出(不支持Oracle存储函数). EF4还没有给我们调用oracle函数的选项.即使使用存储过程,您也需要选择返回引用游标的存储过程.支持的存储过程包括没有返回值但可能具有OUT或IN OUT参数的过程和包方法.Here is the link 但是,如果您正在使用Sql server,那么如何在EF4中完成用户定义函数导入.以下是一些可能对您有帮助的链接: Link1 Link2 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |