繁体   English   中英

传递实体框架查询以查看错误

[英]Passing entity framework query to view error

我刚刚使用实体框架代码优先方法创建了一个数据库。

这是我的模态课

public class MobileProduct
{
    [Key]
    public int p_id { get; set; }
    public string  p_name { get; set; }
    public string  p_description { get; set; }

    public string p_price { get; set; }
}

这是我的DbContext派生类

public class Entities : DbContext
{
   public DbSet<MobileProduct> Mobiles { get; set; }
}

我刚刚创建了一个查询,以通过操作方法传递此数据视图

Entities db = new Entities();
public ActionResult Mobiles()
{
    var q = from n in db.Mobiles
            select n;
    return View(q);
}

这是我的看法

@model HomeShopping.Models.MobileProduct

@{
    ViewBag.Title = "Mobiles";
}

<h2>Mobiles</h2>

访问视图时出现错误

传递到字典中的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery`1 [HomeShopping.Models.MobileProduct]',但是此字典需要类型为'HomeShopping.Models.MobileProduct'的模型项。

说明:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.InvalidOperationException:传递到字典中的模型项的类型为“ System.Data.Entity.Infrastructure.DbQuery`1 [HomeShopping.Models.MobileProduct]”,但是此字典需要模型项为“ HomeShopping”。 Models.MobileProduct”。

我假设您要向视图发送MobileProduct列表? 如果是这样的话; 将您的模型更改为

@model IEnumerable<HomeShopping.Models.MobileProduct>

@{
    ViewBag.Title = "Mobiles";
}

<h2>Mobiles</h2>

当前,您的模型仅需要一个MobileProduct类型的实例,而您的Mobiles操作正在创建MobileProduct的列表。 您还需要通过对操作执行ToList()来评估该操作中的查询。

public ActionResult Mobiles()
        {
            var q = from n in db.Mobiles
                    select n;
            return View(q.ToList());
        }

您没有实现查询,因此将查询本身(而不是查询结果)发送到视图。

var q = (from n in db.Mobiles
         select n).ToList();
return View(q);

正如daveL发布的那样,您还需要在视图中更改模型的定义。

@model IEnumerable<HomeShopping.Models.MobileProduct>

尚未测试,但尝试将模型定义为:

@model IQuerable<HomeShopping.Models.MobileProduct>

如果那不起作用,那么也许:

@model IEnunerable<HomeShopping.Models.MobileProduct>

...对象返回为:

View(q.ToList());

您将查询保存到q,而不是查询的评估。 如果期望多个结果,则需要一个ToList()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM