Asp.net mvc 4 将模型转换为视图模型

Asp.net mvc 4 将模型转换为视图模型,asp.net-mvc-4,entity-framework-4,viewmodel,Asp.net Mvc 4,Entity Framework 4,Viewmodel,我有一个模型给我的桌子主人 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;

我有一个模型给我的桌子主人

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; }
    }
}
然后我有了我的ViewModel

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);

    }
有一种更简单的方法可以将我的
所有者
转换为
所有者数据
,而无需重写我的对象的所有单个属性?

您可以使用。这使它更简单,但我不确定这是您想要的

OwnerData ownerData = new OwnerData  { 
                          lastname = owner.lastname;
                          firstname = owner.firstname;
                          address = owner.address;
                          };
你可以用。这使它更简单,但我不确定这是你想要的

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

我想我用
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);
}

从package manager控制台。

我想我用
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);
}

从package manager控制台。

有一种方法,但肯定不简单。保持这种方式有一些工具使用“反射”,并通过匹配属性名称为您实现这一点。我现在会保持这种方式,但会在OwnerData中添加一个接受Owner对象的构造函数并执行此操作。@a Khudairy我想我通过使用Mapper.CreateMap()找到了一个使用Automapper的好方法;然后是OwnerData OwnerData=Mapper.Map(CustomDbFunctions.GetUserEntity(User,db.Owner);有一种方法,但肯定不简单。保持这种方式有一些工具使用“反射”,并通过匹配属性名称来为您实现这一点。我现在会保持这种方式,但会在OwnerData中添加一个接受Owner对象的构造函数并执行此操作。@a Khudairy我想我通过使用Mapper.CreateMap()找到了一个使用Automapper的好方法;然后是OwnerData OwnerData=Mapper.Map(CustomDbFunctions.GetUserEntity(User,db.Owner);最好在每次需要时编辑构造函数,而不是每次都这样做。最好在每次需要时编辑构造函数,而不是每次都这样做。Mapper.CreateMap调用应在每个应用程序域中进行一次。我们应该在应用程序_Start()方法中调用它。否则,每次调用Index()时都会调用它。CreateMap调用应在每个应用程序域中调用一次。我们应该在应用程序_Start()方法中调用它。否则,每次调用Index()时都会调用它