Я использую EF7 beta 7. У меня есть несколько таблиц стилей форума со свойством навигации между ними, а также отношение, установленное в методе OnModelCreating
контекста:
public class Forum
{
public int ForumId { get; set; }
public string Title { get; set; }
public ICollection<Topic> Topics { get; set; } = new List<Topic>();
}
public class Topic
{
public int TopicId { get; set; }
public string Title { get; set; }
public int ForumId { get; set; }
public Forum Forum { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Forum> Forums { get; set; }
public DbSet<Topic> Topics { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Forum>()
.Collection(f => f.Topics)
.InverseReference(t => t.Forum)
.ForeignKey(t => t.ForumId);
}
}
Я пытаюсь получить список Forum
с количеством Topic
:
var forums = _context.Forums.Include(f => f.Topics)
.Select(f => new
{
f.Title,
f.ForumId,
f.Topics.Count
});
Когда я запускаю это как есть, я получаю , я получаю пустую коллекцию, потому что на самом деле она не загружает ArgumentNullException
Topic
s. Я проверил Sql Profiler
и подтвердил, что выполняется только выбор для получения Forum
и нет второго выбора для Topic
.
Если я позвоню ToList
перед Select
как таковым
var forums = _context.Forums.Include(f => f.Topics)
.ToList()
.Select(f => new
{
f.Title,
f.ForumId,
f.Topics.Count
});
он будет включать Topic
, и код запускается, однако это противоречит цели, потому что это приводит к тому, что он перечисляет все форумы со всеми темами и затем подсчитывает вместо запуска Count
в базе данных. Это ошибка с Include
, или я неправильно использую Include
?
virtual
, чтобы поддерживать как активную, так и ленивую загрузку? - person dmeglio   schedule 04.09.2015virtual
, и никаких изменений. Я не думаю, что это требуется и в EF 6... - person Dave Zych   schedule 04.09.2015