Круговая зависимость EF Core Loading One-to-One Entities - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь создать API, и у меня возникают проблемы с отношениями «один к одному» в EF Core 2.0. Один Person должен иметь Один Car, а Один Car должен иметь Один Person. У меня есть две конечные точки /Person и /Car.

Когда я выполняю запрос на получение /Person, я получаю список всех людей, и у этих людей есть одна машина, но в машине также есть данные о персоне. Э.Г.

[{
    "id": 1
    "firstName": "name",
    "carId": 2
    "car" : {
        "id": 2,
        "make": "Ford",
        "person" : {
            "id": 1
            "firstName": "name",
            "carId": 2
        }
    }
}]

Когда я выполняю запрос на получение /Car, я получаю список машин, и у этих машин есть человек. Э.Г.

[{
    "id": 2,
    "make": "Ford",
    "person":{
        "id": 1
        "firstName": "name",
        "carId": 2
     }
}]

Вот мой конструктор моделей из моего DbContext

modelBuilder.Entity<Car>()
    .HasKey(t => new { t.Id });

modelBuilder.Entity<Person>()
    .HasKey(t => new { t.Id });

modelBuilder.Entity<Person>()
    .HasOne(t => t.Car)
    .WithOne(m => m.Person)
    .HasForeignKey<Car>(f => f.PersonId);

modelBuilder.Entity<Person>().ToTable("Person");

modelBuilder.Entity<Car>().ToTable("Car");

Вот метод, который я использую для получения каждой сущности

return this.People
    .Include(m => m.Car)
    .ToList();

return this.Car
    .Include(m => m.Person)
    .ToList();

Вот мой класс Person:

public class Person
{                           
     [Required]
     public Guid id { get; set; }

     [Required]
     public string FirstName { get; set; }

     public Car Car { get; set; }
}

Вот мой класс автомобиля:

public class Car
{                           
     [Required]
     public Guid id { get; set; }

     [Required]
     public string Make { get; set; }

     public Person Person { get; set; }
}

Итак, мой вопрос: почему это происходит для /Person, а не /Car? и есть ли способ, которым я могу предотвратить это?

...