【问题标题】:System.NotSupportedException: The entity or complex type 'Project.Models.MyModel' cannot be constructed in a LINQ to Entities querySystem.NotSupportedException:无法在 LINQ to Entities 查询中构造实体或复杂类型“Project.Models.MyModel”
【发布时间】:2012-12-13 18:02:28
【问题描述】:

是否可以将连接结果存储在模型中的两个/多个表上? 例如 说我有模型

public class model1{
  public string studentID {get; set;}
  public string Address [get; set;}
 }

public class model2{
  public int ID {get; set;}
  public string StudentName [get; set;}
}

public class model3{
   public string StudentName [get; set;} 
    public string Address [get; set;}
}

如果 model1 和 model2 从数据库中提取数据,我可以通过连接 model1 和 model2 的结果来创建 model3 吗?

编辑

所以,我做了类似的事情

model3object = dbcontext.Model3.AsQueryable();
        model3object = from m1 in dbcontext.model1
                  let id = dbcontext.Model1.Select(x => m1.studentId).Cast<int>().FirstOrDefault()
                  join m2 in dbcontext.model2
                  on  id equals m2.Id
                  select new Result
                  {
                      studentName = m2.studentName,
                      Address = m1.Adress,
                  };

但我得到了错误

System.NotSupportedException: The entity or complex type 'ProjectName.Models.Model3' cannot be constructed in a LINQ to Entities query.

请问我该如何解决这个问题?

【问题讨论】:

  • 模型不会从数据库中提取数据,基本上是 Controller 做的。您可以在控制器中运行连接查询并使用结果数据填充 Model3 的对象并将其传递给视图以供使用。

标签: asp.net-mvc-3 join model


【解决方案1】:

我会使用两种不同的模型。用于存储数据库值的模型和用于在 mvc 中显示数据的视图模型。

看看这个小例子:

var customerOrders = from o in myService.GetOrdersByCustomerId(id)
                     join p in myService.GetAllProducts() on o.ProductId equals p.Id
                     select new CustomerOrderViewModel
                     {
                         OrderId = o.Id,
                         ProductId = p.Id,
                         OrderDate = o.OrderDate,
                         ProductName = p.ProductName
                     };

您的代码对模型 1 和模型 2 执行相同的操作,并将这两个模型映射到一个视图模型。

【讨论】:

  • 是的,我明白这一点,但我需要将其存储在模型中以便在我的视图中访问。我的观点使用了几个模型,这只是其中之一。这就是为什么我不能按原样返回 View(customerOrders)。
  • 您的意思是要将多种类型的模型返回给视图吗?我不在这里跟着你。 @MUG4N 似乎与我要回答的概念相同。他假设您想将两个对象映射(连接)到一个模型并将其呈现给视图。您可以使用任何您想要的连接语句,并创建您想要的任何“连接”视图模型。
  • 我的视图有一个包含 4 个模型的“超级”模型类。我想在联合查询中加入其中的两个,并将其与其他两个模型一起传递给我的视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2017-05-31
  • 2015-02-06
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多