我正在构建一个asp.NET Core 2.0 MVC应用程序。我有以下自我指涉课:
public class ProductCategory
{
public int ID { get; set; }
public string Name { get; set; }
[DataType(DataType.Html)]
public string Description { get; set; }
public int DisplayOrder { get; set; }
public int MenuIconXPosition { get; set; }
public int MenuIconYPosition { get; set; }
public virtual ICollection<ProductSubCategory> ParentCategory { get; set; }
public virtual ICollection<ProductSubCategory> ChildCategory { get; set; }
public ICollection<ProductProductCategory> ProductProductCategories { get; set; }
}
使用以下关系类:
public class ProductSubCategory
{
public int ChildCategoryId { get; set; }
public virtual ProductCategory ChildCategory { get; set; }
public int ParentCategoryId { get; set; }
public virtual ProductCategory ParentCategory { get; set; }
}
在我的dbContext.cs文件中,我有以下内容:
modelBuilder.Entity<ProductSubCategory>()
.HasKey(p => new { p.ChildCategoryId, p.ParentCategoryId });
modelBuilder.Entity<ProductSubCategory>()
.HasOne(p => p.ParentCategory)
.WithMany(p => p.ChildCategory)
.HasForeignKey(p => p.ParentCategoryId);
modelBuilder.Entity<ProductSubCategory>()
.HasOne(p => p.ChildCategory)
.WithMany(p => p.ParentCategory)
.HasForeignKey(p => p.ChildCategoryId);
按预期方式构建数据库迁移和更新。用数据填充它似乎按预期工作。使用以下LINQ查询迭代数据时:
var result = _context.ProductCategories
.AsNoTracking()
.Include(i => i.ParentCategory)
.Include(i => i.ChildCategory)
.OrderBy(i => i.DisplayOrder);
预期结果类似Result -> ICollection<ProductCategory> -> ICollection<ProductSubCategory> -> ICollection<ProductCategory>
,但有时最终的ICollection为空。
有时ChildCategory
集合返回null。总是分配ChildCategoryId
,所以我知道它正确映射。最奇怪的部分是,ChildCategory
集合返回null的变化取决于OrderBy
函数。它似乎完全是任意的,结果中的哪些返回null而不是预期的集合。
知道我错过了什么,或者不理解?我对asp.NET很陌生。