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

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

Сообщение Anonymous »

Я получаю, как мне кажется, бесконечный цикл, когда пытаюсь создать модели представления из данных моей модели, т. е. сопоставить их. Ошибка, которую он выдает, - это «ошибка переполнения стека».
Я считаю, что проблема в том, что при создании RouteViewModel необходимо создать RouteAddresses, но поскольку они также содержат ссылку на Route, он должен их создать, и поэтому он зацикливается бесконечно. Я не уверен, как это решить. Я думал, возможно, просто сохранить идентификатор маршрута, а не весь объект Route в таблице RouteAddress, но не уверен, будет ли это работать с Entityframework.
У меня есть следующие модели, которые представляют мои таблицы:
Модель маршрута может состоять из одной, одной или многих моделей RouteAddress.
Модель RouteAddressModel содержит RouteModel и AddressModel, а также поле заказа, чтобы я мог установить 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() { }
}

Модель адреса
[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() { }
}

Это строка кода в моей ViewModel, которая приводит к сбою моей программы:
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#»