Я получаю то, что, по моему мнению, представляет собой бесконечный цикл, когда я пытаюсь создать модели представления из данных моей модели, то есть сопоставить их. Ошибка, которую я получаю, - это «ошибка переполнения стека».
Я считаю, что проблема в том, что при создании RouteViewModel необходимо создать RouteAddresses, но поскольку они также содержат ссылку на Route, он должен создать их и, следовательно, зацикливается бесконечно. Я не уверен, как это решить. Я думал, возможно, просто сохранить идентификатор маршрута, а не весь объект Route в таблице RouteAddress, но я не уверен, будет ли это работать с Entity Framework.
Ссылка на мой репозиторий:
https://github.com/SpaceWarlord/SampleCode
У меня есть следующие модели, которые представляют мои таблицы: RouteModel может состоять из одного, одного или нескольких RouteAddressModel.
RouteAddressModel содержит RouteModel, AddressModel и поле order, чтобы я мог установить RouteAddresses в порядке внутри маршрута при переходе от A -> B -> C.
AddressModel содержит данные по адресу.
RouteModel:
[Table("Route", Schema = "TPT")]
public class RouteModel : IModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public List? RouteAddresses { get; set; }
public float Distance { get; set; }
public RouteModel()
{
}
}
RouteAddressModel — объединяющая таблица с полезной нагрузкой:
[Table("RouteAddress", Schema = "TPT")]
public class RouteAddressModel : IModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int RouteId { get; set; }
[ForeignKey("RouteId")]
public RouteModel Route { get; set; }
public int AddressId { get; set; }
[ForeignKey("AddressId")]
public AddressModel Address { get; set; }
public int Order { get; set; }
public RouteAddressModel() { }
}
AddressModel:
[Table("Address", Schema = "TPT")]
public class AddressModel : IModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public string? UnitNum { get; set; }
public string StreetNum { get; set; }
public string StreetName { get; set; }
public int StreetTypeId { get; set; }
[ForeignKey("StreetTypeId")]
public StreetTypeModel StreetType { get; set; }
public int SuburbId { get; set; }
[ForeignKey("SuburbId")]
public SuburbModel Suburb { get; set; }
public string City { get; set; } = "Adelaide";
public string? GPS { get; set; }
public List RouteAddresses { get; set; }
public AddressModel() { }
}
Это строка кода в моей модели представления, которая приводит к сбою моей программы:
public static List ToViewModels(List? models)
{
List list = new List();
if (models!=null)
{
foreach (RouteAddressModel model in models)
{
list.Add(new RouteAddressViewModel(
new RouteViewModel(model.Route.Id, model.Route.Name,
RouteAddressViewModel.ToViewModels(model.Route.RouteAddresses),
model.Route.Distance),
new AddressViewModel(model.Address), model.Order));
}
}
return list;
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... inite-loop