[英]Why Includes are ignored in EF6
我有2個實體。
第一實體:
public WorkItem()
{
this.Usage = new Collection<ItemUsage>();
}
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<ItemUsage> Usage { get; set; }
和第二個實體:
public class ItemUsage
{
public ItemUsage()
{
}
public int Id { get; set; }
public int WorkItemId { get; set; }
public string UsedFor { get; set; }
public virtual WorkItem WorkItem { get; set; }
}
但是當我嘗試獲取所有工作項時,Usage列表為空。 即使我添加include。
var all = EntitySet.Include(i => i.Usage).ToList();
延遲加載已禁用。 你知道什么是錯的嗎?
如果我在dbset中檢查查詢,則第二個表沒有Join。
{SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Description] AS [Description]
FROM [dbo].[WorkItem] AS [Extent1]
}
編輯:
配置:
entity.HasKey(f => f.Id);
entity.Property(f => f.UsedFor).IsRequired().HasMaxLength(1000);
entity.HasRequired(f => f.WorkItem).WithMany(s => s.Usage).HasForeignKey(s => s.WorkItemId).WillCascadeOnDelete();
和
entity.HasKey(f => f.Id);
entity.Property(f => f.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
entity.Property(f => f.Description).IsRequired().HasMaxLength(1000);
entity.HasMany(s => s.Usage).WithRequired(s => s.WorkItem).HasForeignKey(s => s.WorkItemId).WillCascadeOnDelete();
DbSet
來檢查查詢。 要檢查實際發送到數據庫的查詢,必須使用Database.Log
屬性 - Context Log屬性 我很確定你的查詢沒問題並且有第二個表的連接。
您將使用以下行在構造函數中刪除結果:
this.Usage = new Collection<ItemUsage>();
EF生成一個從您的實體繼承的代理,覆蓋導航屬性並為其設置自己的集合。 您的構造函數在proxie之后調用,因為您的實體類是代理的基類。 只需刪除你的構造函數,它就可以了。
我更喜歡在我的實體中使用這種導航屬性初始化方式:
class WorkItem
{
private ICollection<ItemUsage> _usage;
public virtual ICollection<ItemUsage> Usage
{
get { return _usage ?? (_usage = new Collection<ItemUsage>()); }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.