实体框架6 Select语句中的存储函数

本文关键字:存储 函数 语句 框架 Select 实体 | 更新日期: 2023-09-27 18:15:26

我有一个LINQ到SQL的连接查询,像这样:

from t in d.MainTable
               join t1 in Db.JoinedTable1 on t.jid1 equals t1.Id into t11
               from t12 in t11.DefaultIfEmpty()
               join t2 in Db.JoinedTable2 on t.jid2 equals t2.Id into t21
               from t22 in t21.DefaultIfEmpty()                   
               select new Dto
               {
                   Field1 = t.Field1,
                   Field11 = t12.Name,
                   Field2 = t.Field2,
                   Field3 = Db.Database.SqlQuery<string>("select dbo.f_MyFunction('val', 4)").FirstOrDefault()
               };

但是我得到一个错误:

LINQ到实体无法识别方法'System. data . entity . infrastructure . dbrawsqlquery ' 1[System. data . entity . infrastructure . dbrawsqlquery]。字符串)SqlQuery [String](系统。字符串,System.Object[])'方法,并且该方法不能转换为存储表达式。

是否可以在select语句中使用存储函数?或者我如何使用一个类,其中属性映射到存储函数?

编辑。我的DbContext类中的名称空间用法:

using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.SqlClient;
using System.Linq;

实体框架6 Select语句中的存储函数

在这个答案中我找到了解决办法。我使用CodeFirstStoreFunctions nuget包与FunctionsConvention.

不要用SqlQuery试试这个CreateQuery之类的东西

    Field3 =  Db.Database.CreateQuery<string>("SELECT Db.Database.f_MyFunction(@someParameter1) FROM {1}", new ObjectParameter("someParameter", someParameter)).FirstOrDefault();