У меня есть следующие модели:
public class MasterData
{
[Key]
public Guid ID { get; set; }
[Required]
public string Name { get; set; }
[InverseProperty(nameof(DetailData.MasterData))]
public List<Detaildata> Details { get; set; }
}
public class DetailData
{
[Key]
public Guid ID { get; set; }
[Required]
public string Name { get; set; }
[InverseProperty(nameof(ChildData.DetailData))]
public List<ChildData> Children { get; set; }
public Guid MasterDataID { get; set; }
[ForeignKey(nameof(MasterDataID))]
public MasterData MasterData { get; set; }
}
public class ChildData
{
[Key]
public Guid ID { get; set; }
[Required]
public string Name { get; set; }
public Guid SectionID { get; set; }
[ForeignKey(nameof(SectionID))]
public Section ChildSection { get; set; }
public Guid DetailDataID { get; set; }
[ForeignKey(nameof(DetailDataID))]
public DetailData DetailData { get; set; }
}
Чтобы убедиться, что миграция сгенерирована правильно, и , чтобы избежать теневых свойств , я добавляю атрибут InverseProperty
, чтобы определить оба конца отношения.
Однако, когда я пытаюсь сериализовать экземпляры, я получаю следующее исключение:
Обнаружен самоссылочный цикл для свойства DetailData с типом
'Models.DetailData. Путь 'Value.Item1.Details [0] .Children [0]'.
Что ж, очевидно, что это самоссылающийся цикл, поскольку MasterData
имеет DetailData
, у которого есть MasterData
объект навигации назад - как и должно быть в навигационных отношениях.
К сожалению, мне нужно сериализовать эти объекты.
Обходным решением было бы пометить свойства InverseProperty
атрибутом JsonIgnore
, но я не уверен, что это вызовет в десериализующей стороне проекта.
Что я должен сделать, чтобы избежать цикла самоссылки, не игнорируя свойства навигации?