将实体模型转换为C#MVC中的模型
假设我有两个数据库表:Order和OrderLine 据认为,创建数据库模型的副本并使用它们而不是数据库模型是一种良好的做法 您通常会看到这样的转换器方法将实体模型转换为C#MVC中的模型,c#,asp.net-mvc,linq,model,linqkit,C#,Asp.net Mvc,Linq,Model,Linqkit,假设我有两个数据库表:Order和OrderLine 据认为,创建数据库模型的副本并使用它们而不是数据库模型是一种良好的做法 您通常会看到这样的转换器方法 public OrderModel ToOrderModel(Order order) { return new OrderModel { OrderID = order.OrderID, Customer = order.CustomerName, OrderLines = o
public OrderModel ToOrderModel(Order order)
{
return new OrderModel
{
OrderID = order.OrderID,
Customer = order.CustomerName,
OrderLines = order.OrderLines
};
}
public OrderLineModel ToOrderLineModel(OrderLine orderLine)
{
return new OrderLineModel
{
OrderLineID = orderLine.OrderLineID,
Quantity = orderLine.Quantity,
Product = orderLine.ProductName,
Order = orderLine.Order
};
}
在我看来,这方面的问题在于:
中的OrderModel
属性是类型OrderLines
的列表,而不是OrderLine
OrderLineModel
中的OrderLineModel
属性属于Order
类型,而不是Order
OrderModel
public OrderModel ToOrderModel(Order order)
{
return ToOrderModel(order, null);
}
private OrderModel ToOrderModel(Order order, List<OrderLineModel> orderLines )
{
//Creating model early so that we have a reference to pass later on
var orderModel = new OrderModel();
orderModel = new OrderModel()
{
OrderID = order.OrderID,
Customer = order.CustomerName,
OrderLines = orderLines ?? order.Lines.ToList().Select(x => ToOrderLineModel(x, orderModel))
};
}
public OrderLineModel ToOrderLineModel(OrderLine orderLine)
{
return ToOrderLineModel(orderLine, null);
}
private OrderLineModel ToOrderLineModel(OrderLine orderLine, OrderModel orderModel)
{
//Creating model early so that we have a reference to pass later on
var orderLineModel = new OrderLineModel();
return new OrderLineModel
{
OrderLineID = orderLine.OrderLineID,
Quantity = orderLine.Quantity,
Product = orderLine.ProductName,
Order = orderModel ?? ToOrderModel(orderLine.OrderModel, orderLineModel),
};
}
有人对我有什么建议吗
提前谢谢你一个词:AutoMapper。检查此答案与你想要实现的答案相同。一个词:AutoMapper。检查此答案与你想要实现的答案相同。
public static Expression<Func<Order, OrderModel>> ToOrderModel =
order => new OrderModel()
{
OrderID = order.OrderID,
Customer = order.CustomerName,
Lines = order.OrderLines.Select(orderLine => ToJournalLineModel.Invoke(orderLine)),
};
public static Expression<Func<OrderLine, OrderLineModel>> ToOrderLineModel =
orderLine => new OrderLineModel()
{
OrderLineID = orderLine.OrderLineID,
Quantity = orderLine.Quantity,
Product = orderLine.ProductName,
//Sadly we can't add an OrderModel here :(
};
//example usage
var orderModels = dbContext.Orders.AsExpandable().Select(ToOrderModel);