Я создаю приложение 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
возвращает нольChildCategoryId
всегда назначается, поэтому я знаю, что он отображается правильно.Самое странное, что коллекция ChildCategory
возвращает нулевые изменения в зависимости от функции OrderBy
.Кажется совершенно произвольным, какие из результатов в результате возвращают нуль вместо ожидаемой коллекции.
Есть идеи, что я упускаю или не понимаю?Я довольно новичок в asp.NET.