2014-01-09 91 views
1

我有一個模型,我的表所有者轉換模型轉換爲視圖模型

namespace MyApp.Models 
{ 
    public partial class Owner 
    { 
     public int owner_id { get; set; } 
     public string firstname { get; set; } 
     public string lastname { get; set; } 
     public string address { get; set; } 
     public string city { get; set; } 

     public virtual User User { get; set; } 
    } 
} 

,然後我有我的視圖模型

public partial class OwnerData 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
    public string address { get; set; } 
} 

我的控制器

public ActionResult Index() 
    { 
     //Create the object Owner based on the User Identity 
     Owner owner = CustomDbFunctions.GetUserEntity(User, db).Owner; 

//New instance of the ViewModel 
     OwnerData ownerData = new OwnerData(); 

     ownerData.lastname = owner.lastname; 
     ownerData.firstname = owner.firstname; 
     ownerData.address = owner.address; 

      return View(ownerData); 

    } 

還有一個更簡單的方式爲了將我的owner轉換成ownerData而不重寫我的對象的單個屬性?

+0

有一種方法,但它確實不簡單.keep這種方式 –

+0

有些工具使用「反射」,並通過匹配屬性名稱來爲你做這件事。我現在要保持這種方式,但會在接受Owner對象的OwnerData中添加一個構造函數並執行此操作。 –

+1

@ Khudairy我想我使用** Automapper **通過** Mapper.CreateMap (); **然後** OwnerData ownerData = Mapper.Map ( CustomDbFunctions.GetUserEntity(User,db).Owner); ** – Sefira

回答

1

什麼,我想我解決了使用Automapper

public ActionResult Index() 
{ 
    //Create the object Owner based on the User Identity 
    Owner owner = CustomDbFunctions.GetUserEntity(User, db).Owner; 

    Mapper.CreateMap<Owner, OwnerData>(); 
    OwnerData ownerData = Mapper.Map<Owner, OwnerData>(owner); 

    return View(ownerData); 
} 

或者問題你更喜歡動態功能

static TDestination GenerateMappingTable<TSource, TDestination>(TSource inputModel) 
    { 
     Mapper.CreateMap<TSource, TDestination>(); 
     return Mapper.Map<TSource, TDestination>(inputModel); 
    } 

要安裝Automapper只是執行

PM> Install-Package AutoMapper 

從包管理器控制檯。

+0

Mapper.CreateMap調用應該爲每個應用程序域調用一次。我們應該在Application_Start()方法中調用它。否則,只要調用Index(),它就會被調用 –

1

您可以使用object initizalizers。那使得它更加簡單,但我不知道這是你想要

OwnerData ownerData = new OwnerData { 
          lastname = owner.lastname; 
          firstname = owner.firstname; 
          address = owner.address; 
          }; 
+0

更好地編輯構造函數而不是每次都需要它。 –