在原始SQL执行期间,用户未处理EntityCommandExectuionException

时间:2014-06-22 14:04:49

标签: c# asp.net-mvc linq entity-framework asp.net-mvc-4

我正在研究MVC应用程序,我正在使用实体框架来生成表等。我在使用Entity框架加入两个表时遇到了挑战。

我的视图中有一个下拉列表并列出了所有报告类型。我的目标是为视图中的选定下拉列表生成报告。我将选择的id作为参数传递给控制器​​,我需要从后面的Report表中获取相应的查询并在原始查询中替换。目前我正在尝试通过硬编码查询(而不是从报告表中获取它)但获得异常。注意测试目的我现在不发送任何参数。我只想使用一个报告操作来生成视图中所选值的所有报告。

这是控制器中的代码。

 public ActionResult GenerateReport()
            {
                var model = new ReportViewModel();
                using (var context = new FloorContext())
                {
                  //  var result = context.Employees.SqlQuery("SELECT * from Employees").ToList();
//Employee employee = context.Employees.FirstOrDefault(emp => emp.EmployeeId ==detail.EmployeeId);
                    var result2 = context.Database.SqlQuery<string>("SELECT e.EmployeeId, e.EntityId, e.EmployeeRefID,p.ProjectId from Employees e,Projectemployeemapping p where e.EmployeeId=p.EmployeeId").FirstOrDefault<string>();

                    foreach (var detail in result2)
                    {
                        Employee employee = context.Employees.FirstOrDefault(emp => emp.EmployeeId == detail.EmployeeId);

                        if (employee != null)
                            model.ReportDetails.Add(
                                new reportmodel
                                {
                                    Id = employee.EmployeeId,
                                    EmployeeName = employee.FirstName + " " + employee.LastName,
                                    Location = "",
                                    Project = ""

                                });
                    }
                }
                return PartialView(model);
            }

以下两个查询按预期工作。

//  var result = context.Employees.SqlQuery("SELECT * from Employees").ToList();
//Employee employee = context.Employees.FirstOrDefault(emp => emp.EmployeeId ==detail.EmployeeId);

但是我需要连接两个表并使用原始SQL查询将结果返回到我的视图。

我已经提到了一些网站,但我没有得到任何加入两个表的答案。以下查询

var result2 = context.Database.SqlQuery<string>("SELECT e.EmployeeId, e.EntityId, e.EmployeeRefID,p.ProjectId from Employees e,Projectemployeemapping p where e.EmployeeId=p.EmployeeId").FirstOrDefault<string>();

gives me the following error:
  

EntityCommandExectuionException未被用户处理。

数据阅读器有多个字段。多个字段对EDM原语或枚举类型无效。

Projectemployeemapping在运行时就像这样创建,因此我无法在上下文中获取表名。

 modelBuilder.Entity<Project>()
                .HasMany(prj => prj.Employees)
                .WithMany(emp => emp.Projects)
                .Map(prj => prj.MapLeftKey("ProjectId").MapRightKey("EmployeeId").

0 个答案:

没有答案