c# - 使用 Entity Framework 4.0/.edmx 从 c# 调用标量函数

标签 c# entity-framework-4 user-defined-functions

我想将我的标量函数映射到我的 .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/

相关文章:

c# - CS0106 编译错误 : readonly property and getter

c# - 使用TransactionScope时避免启用MSDTC

asp.net - Entity Framework 4.0 附加对象图

.net - Entity Framework nvarchar外键区分大小写

entity-framework-4 - Entity Framework (4.0)-使用外键添加新记录

即使 x 远高于所选行,使用 SELECT TOP x 也会产生 SQL 巨大的性能差异

arrays - Excel:在用户定义的函数中传递数组?

c# - 在 3D Kinect 中识别手语

c# - 我如何测量要打印的字符串

apache-spark - 如何在 Spark SQL 中找到分组向量列的平均值?