EntityCommandCompilationException指定的方法不支持实体框架
本文关键字:不支持 实体 框架 方法 EntityCommandCompilationException | 更新日期: 2023-09-27 18:03:42
我是实体框架的新手,我一直在实体框架中获得EntityCommandCompilationException
specified method not supported
。我不明白为什么会出现这个异常。
我已经创建了一个自定义的UDF聚合函数my_Func()
为我的安装MySQL服务器5.7使用这里发布的指导方针。它的工作原理就像任何普通的聚合函数,例如Sum()。也就是说,我可以执行语句select my_Func(Column4) from db.table
,并且它将所需的结果作为double
返回。我已经测试过了,它在MySQL服务器上工作。我希望能够在实体查询中使用此方法,为了做到这一点,我已经做了以下工作。
using (var context = new dbEntities())
{
var results = from items in context.table
group items by new
{ items.Column1, items.Column2 } into groupingItem
select new OutputType()
{
GroupedResult = groupingItem.OrderBy(x => x.Column3).Select(x => x.Column4).my_Func()
};
}
我创建了一个包含方法的静态类。
public static class ModelDefinedFunctions
{
[DbFunction("dbModel.Store", "my_Func")]
public static double my_Func(this IEnumerable<double> items)
{
throw new NotSupportedException("Direct calls are not supported.");
}
}
在.edmx文件中,我手动添加了以下标记
<Function Name="my_Func" ReturnType="double" Aggregate="true"
BuiltIn="false" NiladicFunction="false"
IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="db">
<Parameter Name="value" Type="Collection(double)" Mode="In" />
</Function>
使用以下代码查看实体框架创建的SQL,然后尝试直接在数据库上运行它。
IQueryable query = from x in appEntities
where x.id = 32
select x;
var sql = ((System.Data.Objects.ObjectQuery)query).ToTraceString();
或在EF6中:
var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query)
.ToTraceString();
(偷自如何查看由实体框架生成的SQL ?)
很可能EF没有生成您认为的查询。您可以考虑在StringBuilder中构建查询,并通过EF执行,如下所示:
using (var db = new DbEntity())
{
var sqlStatement = new StringBuilder();
sqlStatement.AppendFormat("SELECT * FROM TABLENAME WHERE ID = '{0}' ", id);
var result = db.ExecuteStoreQuery<MyTableObject>(sqlStatement.ToString()).ToList();
}