使用AutoMapper将数据从SuperClass复制到SubClass

时间:2016-12-21 15:09:23

标签: c# automapper

我正在尝试将所有值从SuperClass传递到构造函数中的子类。 我的想法是我要在构造函数中传递超类对象,它会自动将值填充到当前对象(子类)。

我遇到的错误'这= a'是:

Cannot assign to 'this' because it is read-only

我的视图模型类

public class ItemDetailViewModel : Models.AssetItem
    {
        public ItemDetailViewModel()
        {
        }
        public ItemDetailViewModel(Models.AssetItem model)
        {
            var config = new MapperConfiguration(cfg => cfg.CreateMap<Models.AssetItem, ItemDetailViewModel>());

            var mapper = config.CreateMapper();

            var a = mapper.Map<ItemDetailViewModel>(model);

            this = a;
        }

        // Other Properties & Methods for View Models

    }

如何将数据从超类复制到子类?

有没有更好的方法将属性(具有相同名称)从一个对象复制到另一个对象?

1 个答案:

答案 0 :(得分:1)

我认为你想要的是修改超级(父)类,使其具有复制构造函数。 Article on MSDN解释了这一点,第二篇关于在构造时调用基类方法的文章也有一个good example for you,但是对于你的例子,你想要的是下面的“喜欢”:

// Used a shortened version of the name for the example here
public class AssetItem
{
    public AssetItem(AssetItem other)
    {
        // COPY the contents of other to your "this" instance one element at a time.
        // Don't try assigning over "this"
    }
}

public class ItemDetailViewModel : Models.AssetItem
{
    public ItemDetailViewModel()
    {
    }

    public ItemDetailViewModel(Models.AssetItem model)
        : base(model)
    {
        // Your superclass is "set up" already by now
    }

        // Other Properties & Methods for View Models

}

阅读这两个示例,看看是否有帮助。如果你无法控制超类,那就更难了。它可能已经有了一个复制构造函数,你只需要查找它。