【问题标题】:MVC Include path not valid errorMVC 包含路径无效错误
【发布时间】:2015-11-11 04:20:58
【问题描述】:

控制器

public ActionResult Index(int? id)
{
    var userEmail = User.Identity.Name;
    var model = db.Staffs.Where(i => i.Email == userEmail).Include("Histories").Include("CurrentApplications").FirstOrDefault();


    return View(model);
}

var model = db.Staffs.Where(i => i.Email == userEmail).Include("Histories").Include("CurrentApplications").FirstOrDefault(); 行出现以下错误,但我不知道为什么会出现此错误。

错误

指定的包含路径无效。实体类型 “StaffPortalDBModel.Staff”没有声明导航属性 名称“历史”。

员工班级

public partial class Staff
{
    public int StaffID { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public Nullable<decimal> AllocatedLeave { get; set; }
    public Nullable<int> BalanceLeave { get; set; }

    public virtual IEnumerable<History> Histories { get; set; }
    public virtual IEnumerable<CurrentApplication> CurrentApplications { get; set; }
}

【问题讨论】:

  • 最好使用可写集合(ICollection 等)而不是 IEnumerable
  • @eyeballs 为什么员工偏袒?
  • @M.Azad 当我将数据库添加到我的程序时,它是使用 edmx 自动生成的
  • 为什么不使用 ViewModel?为什么使用包含?只需创建一个 ViewModel 并使用 Select => new xxx 封装您需要的内容

标签: asp.net-mvc include


【解决方案1】:

我相信您在定义导航属性时可能需要使用 ICollection 而不是 IEnumerable。这可能是问题所在。

我还建议(假设您的实体框架版本足够高以至于受支持)使用强类型包含,这样如果您更改 Staff.cs 中的属性,您将收到编译时错误。

即:.Include(s => s.Histories)

【讨论】:

  • 我尝试更改为 ICollection 并使用强类型包含,但它仍然不适合我 D:
  • Staff 类中有一个部分关键字。你用的是edmx吗?因为我通常使用 Code First,所以我对这些图表不太熟悉,但是模型中是否存在导航属性?
  • 是的,我正在使用 edmx。嗯,我的模型中的所有内容都显示为我的问题中的类模型
  • @eyeballs 我很惊讶 Staff 类会使用 IEnumerables 生成。您是否手动创建了上面列出的 Staff 文件?如果您打开模型 edmx 文件,它是否显示了 Staff 和 Histories 之间的关系?
猜你喜欢
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多