EntityCommandCompilationException指定的方法不支持实体框架

时间:2016-08-24 13:29:57

标签: c# mysql entity-framework linq-to-entities entity-framework-6

我是Entity Framework的新手,我不断在实体框架中获得EntityCommandCompilationException specified method not supported。我无法弄清楚为什么会出现这种异常。

我使用发布的here.指南为我安装的MySQL服务器5.7创建了一个自定义UDF聚合函数my_Func()。它就像任何普通的聚合函数一样工作,例如Sum()会起作用。即我可以执行语句select my_Func(Column4) from db.table并返回所需的结果double。我测试过它,它可以在MySQL服务器上运行。我希望能够在linq to entity查询中使用此方法,为了做到这一点,我已经完成了以下操作。

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> 

1 个答案:

答案 0 :(得分:0)

使用以下代码查看Entity Framework创建的SQL,然后尝试直接在数据库上运行它。

@PostConstruct

或在EF6中:

IQueryable query = from x in appEntities
         where x.id = 32
         select x;

var sql = ((System.Data.Objects.ObjectQuery)query).ToTraceString();

(从How do I view the SQL generated by the Entity Framework?被盗)

很可能EF不会生成您认为的查询。您可以考虑在StringBuilder中构建查询并通过EF执行它,如下所示:

var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query)
        .ToTraceString();