Select语句中的Entity Framework 6存储函数
Posted
技术标签:
【中文标题】Select语句中的Entity Framework 6存储函数【英文标题】:Entity Framework 6 Stored Function in Select Statement 【发布时间】:2016-10-28 09:32:44 【问题描述】:我在 LINQ to 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 to Entities 无法识别方法 'System.Data.Entity.Infrastructure.DbRawSqlQuery`1[System.String] SqlQuery[String](System.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;
【问题讨论】:
你在使用 System.Data.Entity.SqlServer; 吗? 是的,它是一个SqlServer Provider。它在 web.config 中设置:在this answer 我找到了解决方案。我将 CodeFirstStoreFunctions nuget 包与 FunctionsConvention 一起使用。
【讨论】:
【参考方案2】:代替 SqlQuery 试试这个 CreateQuery 类似的东西
Field3 = Db.Database.CreateQuery<string>("SELECT Db.Database.f_MyFunction(@someParameter1) FROM 1", new ObjectParameter("someParameter", someParameter)).FirstOrDefault();
【讨论】:
Db.Database 属性中没有 CreateQuery 方法。 msdn.microsoft.com/ru-ru/library/… 查看msdn.microsoft.com/en-us/library/bb339670(v=vs.110).aspx 这对我没有帮助。同样的错误,但错误的方法是 CreateQuery以上是关于Select语句中的Entity Framework 6存储函数的主要内容,如果未能解决你的问题,请参考以下文章