Как вставить в таблицу соединения полезную нагрузку, не вызывая бесконечного цикла?C#

Место общения программистов C#
Ответить
Anonymous
 Как вставить в таблицу соединения полезную нагрузку, не вызывая бесконечного цикла?

Сообщение Anonymous »

Я получаю то, что, по моему мнению, представляет собой бесконечный цикл, когда я пытаюсь создать модели представления из данных моей модели, то есть сопоставить их. Ошибка, которую я получаю, - это «ошибка переполнения стека».
Я считаю, что проблема в том, что при создании 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»