域模型与视图模型完全相同时的最佳映射?

时间:2016-10-19 21:07:34

标签: c# asp.net-mvc linq automapper

通过对编码实践的具体调查来扩展(What to do when model is exactly the same as viewmodel ....

...换句话说,当域模型包含与所需视图模型相同的属性时,什么是最佳映射解决方案?

无论出于何种原因,这种情况比我预期的更频繁,可能是因为域模型往往具有多个导航属性。几乎所有'最终在视图中。

是否有自动播放快捷方式,继承策略或Linq表达式来执行直接映射?

我已经尝试了一些很快就会变得奇怪的继承,以及通过命名约定来实现Automapper'映射'这对于复杂的类型有严重的限制。

除了满足数据注释的需要外,我倾向于在视图中使用域模型并在视图中执行验证。因此缺乏一种映射方法正在推动我采用“反模式”编码。我真的不想要。

1 个答案:

答案 0 :(得分:1)

这取决于模型的内容,但您可以尝试将对象转换为Json,然后将其转换回目标类型:

    public class SourceEntity
    {
        public string Name { get; set; }
        public DateTime StartDate { get; set; }
    }
    public class TargetEntity
    {
        public string Name { get; set; }
        public DateTime StartDate { get; set; }
    }
    public void Sample()
    {
        SourceEntity sourceEntity = new SourceEntity { Name = "Test name", StartDate = DateTime.Now.AddDays(-3) };
        TargetEntity targetEntity = JObject.FromObject(sourceEntity).ToObject<TargetEntity>();
    }

您需要将Newtonsoft.Json添加到您的项目中。

这也会转换复杂的属性和子集合,但会遇到目标类型中的接口和派生类。