У меня есть 2 класса:
public class A
{
public int Id { get; set; }
public string Name { get; set; }
public B myB { get; set; }
}
public class B
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<A> myAs { get; set; }
}
Я использую Postman для проверки вызовов Api.
public IEnumerable<B> GetBs()
{
return _context.Bs.Include(b => b.myAs).ToList();
}
возвращает ожидаемый результат, объекты B и список связанных с ними объектов A:
{
"Id": 1,
"Name": "B2",
"myAs": [
{
"Id": 1,
"Name": "A1"
},
{
"Id": 2,
"Name": "A2"
}
]
},
{
"Id": 2,
"Name": "B3",
"myAs": [
{
"Id": 3,
"Name": "A3"
},
{
"Id": 4,
"Name": "A4"
},
{
"Id": 5,
"Name": "A5"
}
]
}
Обратное, однако, возвращает странную иерархическую структуру:
public IEnumerable<A> GetAs()
{
return _context.As.Include(a => a.myB).ToList();
}
возвращает:
[
{
"Id": 1,
"Name": "A1",
"myB": {
"Id": 1,
"Name": "B2",
"myAs": [
{
"Id": 2,
"Name": "A2"
}
]
}
},
{
"Id": 2,
"Name": "A2",
"myB": {
"Id": 1,
"Name": "B2",
"myAs": [
{
"Id": 1,
"Name": "A1"
}
]
}
},
{
"Id": 3,
"Name": "A3",
"myB": {
"Id": 2,
"Name": "B3",
"myAs": [
{
"Id": 4,
"Name": "A4"
},
{
"Id": 5,
"Name": "A5"
}
]
}
}
]
Метод GetAs возвращает объекты A с объектами B с дальнейшей вложенностьюОбъекты.
Мое понимание после небольшого исследования (я мог бы быть здесь очень ошибочным) состоит в том, что, поскольку A имеет свойство навигации к B (myB), а B имеет свойство навигации к списку объектов A (myAs) это вызывает некоторую петлю.
Мои вопросы
- Правильно ли мое понимание здесь?Вот почему иерархия возвращается в этом странном макете?
- Как мне это исправить?Я могу взять свойство навигации ICollection из модели домена, но затем я больше не могу запрашивать As и связанные с ними B?
note Примечание A и B на самом деле не являются моими моделями домена.Я просто хотел сохранить пример как можно более простым.
Заранее спасибо.