自我引用很多很多类没有返回.NET Core 2.0中的Collection

时间:2018-06-06 21:38:33

标签: c# linq asp.net-core entity-framework-core asp.net-core-2.0

我正在构建一个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很陌生。

0 个答案:

没有答案