【问题标题】:Why are my Entity Framework POCOs not loading the related entities correctly?为什么我的实体框架 POCO 没有正确加载相关实体?
【发布时间】:2011-06-09 16:35:25
【问题描述】:

我有一个代码优先模型:

namespace InternetComicsDatabase.Models
{
    public class Issue
    {
        [Key]
        public int      IssueId     { get; set; }
        public int      Number      { get; set; }
        public string   Title       { get; set; }
        public DateTime Date        { get; set; }

        public virtual ICollection<Creator> Creators { get; set; }
    }

    public class Creator
    {
        [Key]
        public int      CreatorId   { get; set; }
        public string   FirstName   { get; set; }
        public string   MiddleName  { get; set; }
        public string   LastName    { get; set; }

        public virtual ICollection<Issue> Issues { get; set; }
    }

    public class Icbd : DbContext
    {
        public DbSet<Issue> Issues { get; set; }
        public DbSet<Creator> Creators { get; set; }
    }
}

在控制器中,我正在尝试加载与特定问题相关的所有Creators

    public string CreatorTest()
    {
        string output = "";
        var issue = db.Issues.Where(x => x.IssueId == 8);
        foreach (var item in issue.Creators)
            output += item.FirstName;
        return output;
    }

但这不会编译...为什么不会编译?

具体来说;那一行写着:

        foreach (var item in issue.Creators)

由于出现以下错误而无法编译:

Error   1   'System.Linq.IQueryable<InternetComicsDatabase.Models.Issue>' does not contain a definition for 'Creators' and no extension method 'Creators' accepting a first argument of type 'System.Linq.IQueryable<InternetComicsDatabase.Models.Issue>' could be found (are you missing a using directive or an assembly reference?) C:\Users\dropstuff\asp.net mvc\InternetComicsDatabase\InternetComicsDatabase\Controllers\HomeController.cs  19  31  InternetComicsDatabase

那是怎么回事? :-)

我回去仔细检查了我的控制器(您可以向上滚动),是的;就在那里! Creators Issues 的属性。那么给了什么?也许它与延迟加载有关?

【问题讨论】:

    标签: entity-framework lazy-loading entity-framework-4.1 entity-relationship


    【解决方案1】:

    尝试在db.Issues.Where(x =&gt; x.IssueId == 8) 中使用Single() 而不是Where()

    var issue = db.Issues.Single(x => x.IssueId == 8);
    

    【讨论】:

      【解决方案2】:

      您的查询错误。你想要:

      var issue = db.Issues.Where(x => x.IssueId == 8).Single();
      

      您期望的是一个问题,而不是一个问题的列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        • 2012-02-07
        • 2012-05-15
        • 2013-04-11
        • 1970-01-01
        相关资源
        最近更新 更多