Спина от моего ранее вопроса ->How to map .NET function call to property automatically?Как рекурсивно отображать объект для просмотра модели с вызовом функции Automapper?
У меня есть несколько связанных объектов сущностей, которые я хочу карту для просмотра моделей, и каждое отображение в модель представления необходимо вызвать функцию для отображения.
Сложная часть состоит в том, что функция entity возвращает другой объект, который необходимо сопоставить с его моделью просмотра. Поток выглядит примерно так.
CartEntity > CartViewModel > CartEntity.GetCartItems() > CartViewModel.CartItems > CartEntity.GetCartItems().GetItem() > CartViewModel.CartItems.Item > CartEntity.GetCartItems().GetItem().GetProduct() > CartViewModel.CartItems.Item.Product
Вот классы, в которых я пытаюсь рекурсивно построить вложенный набор, который заполняется каждым объектом.
Сущность:
public class CartEntity {
public long Id {get; set;}
public List<CartItem> GetCartItems() {
return Repository.GetAll<CartItem>();
}
}
public class CartItem {
public long Id {get; set;}
public long ItemId {get ; set;}
public Item GetItem() {
return Repository.Get<Item>(ItemId);
}
}
public class Item {
public long Id {get; set;}
public long ProductId {get; set;}
public Item GetProduct() {
return Repository.Get<Product>(ProductId);
}
}
public class Product {
public long Id {get; set;}
}
Вид модель:
public class CartViewModel {
public long Id {get; set;}
public List<CartItemViewModel> {get; set; }
}
public class CartItemViewModel {
public long Id {get; set;}
public ItemViewModel Item {get; set; }
}
public class ItemViewModel {
public long Id {get; set;}
public ProductViewModel Product {get; set; }
}
public class ProductViewModel {
public long Id {get; set;}
}
Я рекомендовал бы, чтобы ваши модели надевают 't делать вызовы в базе данных ... если бы объекты имели обычные свойства, все это бы просто работало –
Отключение вышеуказанного комментария, если вы привязаны к вызову базы данных непосредственно из своих моделей, вы также можете использовать ленивый загруженный, только свойство вместо общедоступных методов, чтобы сделать сопоставление немного проще. Вот пример (извините, что это в одной строке): 'private Item _product; public Item Product {get {return _product ?? (_product = Repository.Get (ProductId)); }} ' –
valverij
Я использую Redis и следуя шаблону, используемому примерами ServiceStack. Не знаете, как реорганизовать без введения значительного количества нового кода. https://github.com/ServiceStack/ServiceStack.Redis/blob/master/tests/ServiceStack.Redis.Tests/Examples/BestPractice/BlogPostBestPractice.cs – user3092978