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


Я определил модели следующим образом.
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);