Почему мои POCO Entity Framework неправильно загружают связанные объекты? - PullRequest
1 голос
/ 09 июня 2011

У меня есть код первой модели:

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. Так что же дает? Может быть, это как-то связано с ленивой загрузкой?

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Попробуйте использовать Single() вместо Where() в db.Issues.Where(x => x.IssueId == 8)

var issue = db.Issues.Single(x => x.IssueId == 8);
1 голос
/ 09 июня 2011

Ваш запрос неверный. Вы хотите:

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

Вы ожидаете одну проблему, а не список одной проблемы.

...