Самостоятельная ссылка Класс многие ко многим не возвращает коллекцию в .NET Core 2.0 - PullRequest
0 голосов
/ 07 июня 2018

Я создаю приложение 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.

...