2012-10-04 62 views
2

我正在接受一個對象並將其屬性寫入模型,然後在我的視圖中顯示模型進行編輯。之後,用戶點擊提交併將模型發回給我的控制器。我現在想要取模型的屬性並將它們寫回到對象中。將屬性從模型複製回對象 - 顯式複製或迭代屬性集合?

我正在考慮使用反射來這樣做,但我有點謹慎。以爲我會檢查是否有更明顯的答案。

代碼:如何做到這一點

//OrderDetailsModel 
public OrderDetailsModel(Order order) 
{ 
    CompletionDateTime = order.CompletionDateTime; 
    CreateDateTime = order.CreateDateTime; 
    UpdateDateTime = order.UpdateDateTime; 
    BusinessArea = order.BusinessArea; 
    Comment = order.Comment; 
    CostCenter = order.CostCenter; 
    CreateUsername = order.CreateUsername; 
    Customer = order.Customer; 
    IncidentNumber = order.IncidentNumber; 
    OrderID = order.ID; 
    OrderStatus = order.OrderStatus; 
    ProjectName = order.ProjectName; 
    ProjectNumber = order.ProjectNumber; 
    ProjectSubcode = order.ProjectSubcode; 
    UpdateUsername = order.UpdateUsername; 
    Description = order.Description; 
} 

//OrdersController 
public ActionResult SaveOrderDetails(OrderDetailsModel orderDetailsModel) 
{ 
    Order order = WorkflowManager.GetOrderByID(orderDetailsModel.OrderID); 

    foreach(PropertyInfo propertyInfo in orderDetailsModel.GetType().GetProperties) 
    { 
     //Write properties back. 
    } 

    return null; 
} 

的思考?

+0

爲什麼不只是緩存原始順序,然後用您存儲在OrderDetailsModel中的數據設置屬性?更好的是,爲什麼不在你的OrderDetailsModel中使用getter和setter,使用緩存順序中的getter和setter? –

回答

2

看一看AutoMapper。它使左手<短的工作 - >右手編碼。

下面是一個例子:

Mapper.CreateMap<Order, OrderDetailsModel>(); 
OrderDetailsModel dto = Mapper.Map<Order, OrderDetailsModel >(order); 
1

使用Automapper。它可以映射沒有任何自定義編碼的屬性。您可以使用NuGet將它添加到Visual Studio中的項目中。

0

你也應該看看ValueInjecter

同時使用後,Automapper和ValueInjecter,我要說的是ValueInecter是絕對更容易使用。在你想從一個對象映射到另一個對象之前,它也不需要任何設置。只要屬性名稱匹配,就可以使用默認功能。它也支持拼合和解壓。

下面是一個例子:

myObject.InjectFrom(anyOtherObject); 

不要忘了,包括引用組裝後使用語句:

using Omu.ValueInjecter; 

感謝。