從我以前的問題分離 - >How to map .NET function call to property automatically?如何使用Automapper函數調用遞歸地將實體映射到視圖模型?
我有一些相關的實體對象,我想映射到視圖模型,並且每個映射到視圖模型需要調用映射的函數。
棘手的部分是實體函數返回需要映射到它的視圖模型的另一個實體。流程有點像這樣。
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;}
}
我建議你不要車型不調用數據庫...如果實體具有常規屬性,它們都可以正常工作 –
如果您想從模型中直接調用數據庫,那麼您也可以使用延遲加載的只讀模式,只有財產而不是公共方法使映射更容易一些。下面是一個例子(對不起,它在一行中):'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