我试图让我的头发试图让我的递归EFCore物品装载他们所有的祖父母/孙子,我无法决定我是垃圾还是我在做什么工作没有按要求工作的功能。
链接有一个类别,它存在于其他类别的层次结构中(数据结构正常工作)
Link link = FP.Links.Include(a=>a.Transaction.Account.Home)
.Include(a=>a.Category)
.ThenInclude(b=>b.parent)
.AsEnumerable()
.Where(a=>a.TransId==_transId &&
a.Transaction.Account.Home==_authHome)
.FirstOrDefault();
当我查看Link.Category.parent.parent时,它为null。它似乎总是加载上面的前几个级别,当我拉回一个类别超过2个父级的链接时,它最终会给我一个空值。
我尝试过各种各样的SO答案,这些答案引导我使用包含(感觉笨重)和最新的关于.AsEnumerable()的讨论。我尝试过FirstOrDefault()和SingleOrDefault()。
我已经达到了:在EFCore 2中加载还远未完成,并且“修复了”#39;是一件事。所以,我尝试添加:
List<Category> CL= FP.Categories.Where(a=>a.home==_authHome).ToList();
在上一个查询之前,它可以正常工作。
我有三个问题:
1)我是否正确地解释了这会强制我的DBContext已经加载了我需要的数据,所以当我重新查询时它有访问权限?
2)我是否对自己保持开放态度并不适用于某些测试无法告诉我的情况?
3)是否有任何不那么简单的方法来使同样的事情发挥作用? (我可能想要link.Category.parent.parent.parent。(n).parent都可以访问)
还有一个问题,就是知道SO的规则,我会用言辞来表达:
4)从调试/编码的角度来看,是否有任何需要这样做的世界????
类:
public class Link
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get; set;}
[ForeignKey("Transaction")]
public int TransId { get; set; }
public DateTime effectiveDt { get; set; }
public bool isRefund { get; set; }
public int transactionRole { get; set; }
public int setBy { get; set; }
public string transactionComment { get; set; }
public virtual Transaction Transaction { get; set; }
public virtual Category Category { get; set; }
}
public partial class Category
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get; set;}
public string Name { get; set; }
public int categoryType { get; set; } //0=Normal, 1=Savings, 2=Loan
[JsonIgnore]
public virtual Category parent { get; set; }
[JsonIgnore]
public virtual ICollection<Summary> summaries { get; set; }
public virtual ICollection<Category> children { get; set; }
[JsonIgnore]
public virtual ICollection<Link> Link { get; set; }
[JsonIgnore]
public virtual ICollection<Budget> Budget { get; set; }
[JsonIgnore]
public virtual Home home { get; set; }
}