【问题标题】:ADO.net Entity Model Framework Compiled Query issueADO.net 实体模型框架编译查询问题
【发布时间】:2012-09-13 14:04:28
【问题描述】:

我有以下代码尝试使用 LINQ 创建 CompiledQuery。

public static Func<DataContext, int, object>
        GetTeamMembersByTeamId = CompiledQuery.Compile<MazikReviewEntities, int, object>(
            (context, teamId) => from tp in context.TeamPlayers
                                    join t in context.Teams on tp.TeamId equals t.ID
                                    join emp in context.Employees on tp.EmployeeId equals emp.ID
                                    where tp.TeamId == teamId && emp.IsActive == true
                                    orderby emp.JoiningDate
                                    select new ProjTeamMemberDetails
                                    {
                                        EmployeeName = emp.FirstName + " " + emp.LastName,
                                        Email = emp.Email,
                                        Designation = context.Designations.FirstOrDefault(s => s.ID == emp.DesignationId).Name,
                                        NIC = emp.NIC,
                                        JoiningDate = emp.JoiningDate,
                                        EmployeeID = emp.ID
               });

}

在 CompiledQuery.Compile 行中,我的 datacontext 出现错误,其中指出,

“类型'MazikGlobalReviewModel.MazikReviewEntities'不能用作泛型类型或方法'System.Data.Linq.CompiledQuery.Compile(System.Linq.Expressions.Expression>)'中的类型参数'TArg0'。有没有从 'MazikGlobalReviewModel.MazikReviewEntities' 到 'System.Data.Linq.DataContext' 的隐式引用转换。”

这是什么错误以及如何解决?

【问题讨论】:

    标签: .net ado.net-entity-data-model


    【解决方案1】:

    我来自 Mazik 的朋友。如果您查看错误,则非常清楚那里出了什么问题。 看看下面的代码。代码中的 datacontext 和 MazikReviewEntities 是什么。确保它们属于同一类型。

     public static readonly Func<**MyDataContext**, int, IQueryable<tblSomething>> CompiledSelectSites =
                    CompiledQuery.Compile((**MyDataContext** c, int conf_id) =>
                            (from s in c.TblSomething
                             where s.ID == id
                             select site));
    

    更多信息请查看link

    这应该可以解决您的问题。

    【讨论】:

    • 更改了我的代码,但仍然得到相同的错误'public static readonly Func> GetTeamMembersByTeamId = CompiledQuery.Compile((MazikReviewEntities context, int teamId, IQueryable obj) =>'
    • 对编译的调用应该只包括你的输入参数而不是你的输出。请查看我提到的代码,然后通过答案中包含的链接。从 CompiledQuery.Compile 调用中删除您的 IQueryable
    • 完成与链接中提到的完全相同的操作。还根据您的代码更新了我的代码。但没有运气。我认为我的 DataContext 存在一些问题,即 MazikReviewEntities
    • 我认为在 Link2SQL 中我们有从 db 创建的数据上下文。而在 ADO.net 实体框架中,我们没有 datacontext
    • 我不知道你在这里说什么,在这两种情况下,你都需要从数据库中创建文件来处理。对于 Linq 是 dbml,对于 EF 是 edmx。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多