Как мне добиться самостоятельной ссылки в Entity Framework Core? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть отдел таблиц, который ссылается на себя. Чтобы построить иерархию, каждый отдел в иерархии должен ссылаться на отдел верхнего уровня.

Вот мой код:

public class Department
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
    public Department Department { get; set; }
}

Я использовал приведенный ниже код для установления sh родительских и дочерних отношений для всех отделы.

В моей базе данных ParentId указывает, есть ли в отделе какие-либо отделы высшего уровня в иерархии?

public void ConfigureDepartmentContext(ModelBuilder modelBuilder)
{
     modelBuilder.Entity<Department>(department=>
     {
         department.HasKey(a => new { a.Id });
         department.Property(a => a.Id).HasColumnName("ID");
         department.Property(a => a.Name).HasColumnName("Department_Name");
         department.Property(a => a.ParentId ).HasColumnName("Parent_Id ");
     });

     modelBuilder.Entity<Department>()
          .HasOne(f => f.Department)
          .WithOne(f => f.Department)
          .HasForeignKey(f => f.ParentId);
}

I я получаю ниже ошибка

не может преобразовать лямбда-выражение в тип, потому что это не тип делегата

1 Ответ

1 голос
/ 12 февраля 2020

Напишите ModelBuilder для Department следующим образом:

public void ConfigureDepartmentContext(ModelBuilder modelBuilder)
{
     modelBuilder.Entity<Department>(department=>
     {
        department.HasKey(a => new { a.Id });
        department.Property(a => a.Id).HasColumnName("ID");
        department.Property(a => a.Name).HasColumnName("Department_Name");
        department.Property(a => a.ParentId ).HasColumnName("Parent_Id ");
     });

     // Here is the ForeignKey configuration

     modelBuilder.HasOne(d => d.Department)
       .WithOne().HasForeignKey<Department>(d => d.ParentId)
       .IsRequired(false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...