【问题标题】:MVC 3 Entity Framework Empty Result SetMVC 3 实体框架空结果集
【发布时间】:2013-01-23 18:56:44
【问题描述】:

我正在开发一个应用程序,它会返回一个 Excel 报告,其中每个员工都有多个角色以及每个角色的预期和实际工作时间。例如,我可能被列为一个专栏的开发人员和另一个专栏的 BA!。它正在使用的查询返回一个空的结果集。

    public ActionResult ExpectedVsActual()
    {

        try
        {
            ProjectTotalsReportViewModel model = new ProjectTotalsReportViewModel();

            Employee currentUser = DataHelper.GetEmployee(User, db);

            model.AvailableEmployees = db.Employees.OrderBy(e => e.LastName).ThenBy(e => e.FirstName).ToList();

            if (currentUser.SecurityRoleCode == Constants.SECURITY_ROLE_CODE_ADMIN)
            {
                model.AvailableProjects = (db.Projects.Any() ? db.Projects.Where(p => p.ProjectCategoryCode == Constants.PROJECT_CATEGORY_DIRECT).OrderBy(p => p.ProjectName).Distinct().ToList() : new List<Project>());

                model.ProjectRate = (db.EmployeeProjectRates.Any() ? db.EmployeeProjectRates.Where(epr => epr.EmployeeID == epr.EmployeeID).OrderBy(epr => epr.EmployeeID).Distinct().ToList(): new List<EmployeeProjectRate>());
            }
            else
            {
                model.AvailableProjects = (db.EmployeeProjectRates.Any(epr => epr.EmployeeID == currentUser.EmployeeID && epr.ProjectRoleCode == Constants.PROJECT_ROLE_PROJECT_MANAGER) ? db.EmployeeProjectRates.Where(epr => epr.EmployeeID == currentUser.EmployeeID && epr.ProjectRoleCode == Constants.PROJECT_ROLE_PROJECT_MANAGER).Select(epr => epr.Project).OrderBy(p => p.ProjectName).Distinct().ToList() : new List<Project>());
            }

            model.SelectedEmployeesForCheckBox = model.AvailableEmployees;
            model.SelectedProjectsForCheckBox = model.AvailableProjects;

            ViewBag.InitialLoad = true;

            return PartialView("_ExpectedVsActual", model);
        }
        catch
        {
            return null;
        }
    }


[HttpPost]
    public ActionResult ExpectedVsActual(ProjectTotalsReportViewModel Model)
    {
        try
        {
            if (ModelState.IsValid)
            {

                ViewBag.InitialLoad = false;
                DataHelper.TimeFrame selectedTimeFrame = DataHelper.TimeFrame.Weekly;//Need to remove after adding selection for time frame

                SMCContext db = new SMCContext();
                ViewBag.TimeFrameSelectList = DataHelper.GetTimeFrameSelectList();
                List<ProjectTimeFrame> timeFrames = new List<ProjectTimeFrame>();
                ProjectViewModel Project = new ProjectViewModel();
                timeFrames = DataHelper.GetProjectTimeFrames(Model.StartDate.Value, Model.EndDate.Value, selectedTimeFrame);

                Project.EmployeeProjectRates = Project.EmployeeProjectRates.OrderBy(epr => epr.Employees.Single(e => e.Value == epr.EmployeeID.ToString())).ToList();



                    resultFile = currentPackage.GetAsByteArray();
                    return File(resultFile, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Expected Vs Actual.xlsx");

                }
                #endregion
            }
            else
            {
                return PartialView("_ExpectedVsActual", Model);
            }

        }
        catch (Exception e)
        {
            throw e;

        }







    }

我遗漏了文件的大部分格式化和创建,它与空结果无关。结果应该是这样的

【问题讨论】:

  • 您是否尝试过启用 Sql Server Profiler 并查看 EF 发送到您的数据库的查询?

标签: c# .net asp.net-mvc-3 entity-framework epplus


【解决方案1】:

至少在以下三点之一对你来说是失败的:

  1. 验证数据库中的数据是否反映了您正在搜索的内容。最快的方法是通过某种分析器,它可以捕获转换后的 EF 查询并向您显示 SQL 语句。 linqpad 是一个很好的工具。

  2. 验证您的映射。您可能没有正确映射您的关系,因此无法生成任何数据。

  3. 验证您自己的约束。看起来您有基于权限的查找。在获取当前用户后放置一个断点,并确保它具有与您在条件中查找的权限 (Constants.SECURITY_ROLE_CODE_ADMIN) 匹配的权限。

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 2014-01-11
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多