当前位置: 首页 > 编程语言 > C#

在EntityFramework中调用User-DefinedFunctions4分享

时间:2023-04-10 15:25:51 C#

在EntityFramework中调用User-DefinedFunctions4我在SQLServer2005数据库中有一个返回位的用户自定义函数。我想通过实体框架调用这个函数。我一直在环顾四周,运气不佳。在LINQtoSQL中这很容易,我只需将函数添加到数据上下文模型中,然后我就可以像这样调用它。boolresult=FooContext.UserDefinedFunction(someParameter);使用实体框架,我已将该函数添加到我的模型中,它出现在SomeModel.StoreStoredProcedures下的模型浏览器中。该模型不为函数生成代码,.edmx文件的XML包含:我能得到的最接近的是:boolresult=ObjectContext.ExecuteFunction("UserDefinedFunction",newObjectParameter("someParameter",someParameter)).First();但我收到以下错误消息:在容器“FooEntities”中找不到FunctionImport“UserDefinedFunction”。名称已更改以保护无辜者。tldr:如何使用EntityFramework4.0调用标量值用户定义函数?我终于解决了它:D对于标量函数,您可以附加一个FROM{1}子句。boolresult=FooContext.CreateQuery("SELECTVALUEFooModel.Store.UserDefinedFunction(@someParameter)FROM{1}",newObjectParameter("someParameter",someParameter)).First();这绝对是在EF条件下使用LINQtoSQL。要调用用户定义的静态类型SQL函数,您可以使用ExecuteStoreQuery,publicstringGetNumberOFWorkDays(GuidleaveID){using(varctx=newINTERNAL_IntranetDemoEntities()){returnctx.ExecuteStoreQuery("SELECT[dbo].[fnCalculateNumberOFWorkDays](@leaveID)",newSqlParameter{ParameterName="leaveID",Value=leaveID}).FirstOrDefault();}}使用ODPNETbeta2(Oracle)调用EF4中返回数字的函数:using(vardb=newFooContext()){varqueryText="SELECTFooModel.Store.MY_FUNC(@param)FROM{1}"varresult=db.CreateQuery(queryText,newObjectParameter("param",paramvalue));返回结果.First().GetDecimal(0);我在这里添加它是因为基于EvilPigeon的代码我可以为Oracle解决这个问题。(也赞成他的回答)。如果你想通过EntityFramework在MSSQL中调用表值函数;你可以使用这个:varretval=db.Database.SqlQuery(String.Format(@"select*fromdbo.myDatabaseFunction({0})",id));ObjectResultresult=context.ExecuteStoreQuery("SelectEmployeeNamefromUserwhereId={0}",15);http://msdn.microsoft.com/en-us/library/ee358758.aspx您可能会发现这很有帮助。您似乎只能通过eSQL直接调用它们,而无需使用Linq。Thinkid为遇到此问题的任何其他人添加注释,如果您的sql函数参数可为空,则必须使用参数值“default”调用sql中的函数。要使用EntityFramwork调用这样的函数,请尝试以上是C#学习教程:在EntityFramework4中调用用户自定义函数分享的所有内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注——boolresult=FooContext.CreateQuery("SELECTVALUEFooModel.Store.UserDefinedFunction(null)FROM{1}").First();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: