我想将我的标量函数映射到我的 .edmx,但它失败了。我右键单击我的 Entity Framework 映射,然后选择从数据库更新模型。它出现在我的模型浏览器的存储过程文件夹中。
但是,当我想将它添加到模型浏览器中的Function Imports
文件夹时,消息scalar function does not appear 显示在下拉列表中。有人可以帮助我吗?
我可以使用旧方法调用标量函数,例如:
dbContext.ExecuteStoreQuery<DateTime?>(
"SELECT dbo.getMinActualLoadDate ({0}, {1}, {2}) AS MyResult",
LoadPkid, LoadFkStartLoc, TripSheetPkid).First();
但这不是最好的方法。我的经理希望我找到一种方法能够将标量函数放在“函数导入”文件夹中,这样我就可以使用以下代码而不是之前的代码调用标量函数:
dbContext.ExecuteFunction("getMinActualLoadDate ", paramList);
我试图添加一张图片来显示我的意思,但由于我的声誉仍然很低,我无法这样做。但是可以在此处找到图像:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/756865e5-ff25-4f5f-aad8-fed9d741c05d
谢谢。
最佳答案
我遇到了同样的问题。这是我发现自己足够合适的解决方案(在 EF5 中测试,但也应该在 EF4 中工作):
不支持开箱即用的映射标量值函数,但您可以直接执行它们。
您还可以编辑 edmx 文件,使 edmx 为标量值函数生成正确的方法,但如果您将模型与数据库同步,它将被删除。
自己编写标量值函数实现:
string sqlQuery = "SELECT [dbo].[CountMeals] ({0})";
Object[] parameters = { 1 };
int activityCount = db.Database.SqlQuery<int>(sqlQuery, parameters).FirstOrDefault();
或编辑 edmx 并添加 Xml 以自定义标量值函数映射:
<Function Name="CountActivities" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<CommandText>
SELECT [dbo].[CountActivities] (@personId)
</CommandText>
<Parameter Name="personId" Type="int" Mode="In" />
</Function>
此信息是在 blog post 中找到的
关于c# - 使用 Entity Framework 4.0/.edmx 从 c# 调用标量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14368505/