我正在使用EF7 beta 7.我有幾個論壇樣式表,它們之間有一個導航屬性,以及在上下文的OnModelCreating
方法中設置的關係:包括不包括導航屬性,除非ToList被調用
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
的選項。
如果我的Select
之前調用ToList
這樣
var forums = _context.Forums.Include(f => f.Topics)
.ToList()
.Select(f => new
{
f.Title,
f.ForumId,
f.Topics.Count
});
它將包含Topic
的和代碼運行,但是這違背了目的,因爲這會導致它枚舉所有論壇的所有主題和然後計數,而不是在數據庫上運行Count
。這是一個與Include
錯誤,或者我使用Include
錯?
我還沒有EF7工作,只有6所以也許它改變,但不會將您的導航屬性必須'virtual'爲了支持急切和懶惰加載? – dman2306
@ dman2306我只是試圖讓它們變成'虛擬'而沒有改變。我不認爲在EF 6中這是必需的... –