Свойство EF Core для активной загрузки дочернего родительского прародителя - PullRequest
0 голосов
/ 05 марта 2019

У меня была таблица, в которой указана страна, штат и округ, являющийся округом ребенка, укажите родителя и страну деда.

Я хочу иметь таблицу сотрудников со свойством навигации, которое может ссылаться награфство детей в таблице регионов и возможность загружать связанных с нагрузкой детей, родительских родителей, я имею в виду страну, штат и округ.

Как определить такое отношение и загруженность?.

enter image description here

enter image description here

Я определил модели следующим образом.

public enum RegionTypeEnum
{
    Country = 0,
    State = 1,
    County = 2,
}

public class RegionType
{
    public RegionTypeEnum Id { get; set; }
    public string Name { get; set; }
}


public abstract class Region : Entity<int>
{
    public int Id { get; set; }
    public int? ParentId { get; set; }
    public Region Parent { get; set; }

    public RegionTypeEnum RegionTypeId { get; set; }
    public RegionType RegionType { get; set; }

    public string Name { get; set; }
}

public class Country : Region
{
}

public class State : Region
{
}

public class County : Region
{
}

public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }

    // TODO define navigation to county and be able to eager load county, region and country
}

со следующим свободным APIконфигурация (код сокращен для краткости)

    // IEntityTypeConfiguration<Region>

    builder.HasIndex(e => new { e.ParentId, e.Name }).IsUnique();
    builder.Property(e => e.Name).IsRequired().HasMaxLength(80);

    builder.Property(e => e.RegionTypeId).IsRequired().HasDefaultValue(RegionTypeEnum.Country);

    builder.HasOne(e => e.Parent)
        .WithMany()
        .HasForeignKey(e => e.ParentId);

    builder.HasOne(e => e.RegionType)
        .WithMany()
        .HasForeignKey(e => e.RegionTypeId)
        .IsRequired()
        .OnDelete(DeleteBehavior.Restrict);

    builder.HasDiscriminator(e => e.RegionTypeId)
        .HasValue<Country>(RegionTypeEnum.Country)
        .HasValue<State>(RegionTypeEnum.State)
        .HasValue<County>(RegionTypeEnum.County);


    // IEntityTypeConfiguration<RegionType>

    builder.Property(e => e.Id).ValueGeneratedNever();
    builder.Property(e => e.Name).IsRequired().HasMaxLength(10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...