Odata:将视图模型映射到域模型

时间:2016-05-04 11:16:27

标签: asp.net-mvc entity-framework odata viewmodel

我有一个odata调用,第一次正常工作但由于属性不匹配而在任何连续调用期间失败。我的控制器逻辑非常少,因为它只负责调用我的域服务来查询实体框架数据库并将结果作为视图模型返回。但是,当我尝试排序时出现错误,因为我的视图模型的层次结构与我的域模型不匹配。

域名模型:

public class Parent
{
  public object Child
  {
    public string Name
  }
}

查看型号:

public class Parent
{
  public string ChildName
}

使用上面的示例,EF查询将返回一个Parent列表,我将转换为查看模型以发送给客户端。当对ChildName odata进行排序请求失败时,因为Parent没有ChildName的概念。我需要将ChildName映射到Child.Name。我已经看到过使用EntitySets更改名称的人的例子,但没有一个会在我的案例中映射模型。

1 个答案:

答案 0 :(得分:0)

我最终使用EF在查询期间使用LINQ表达式将我的域模型转换为视图模型。示例但将视图模型更改为ParentView并添加了构造函数:

var query = from p in context.Parent select new ParentView(p.Child.Name)

这是积极的,它全部在数据库上运行,因此我不会传输不必要的数据。此外,我能够继续使用查询中的odata选项,因为odata将添加到查询中。但是,我不禁觉得这不是最好的方式。