2016-05-04 210 views
0

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

域模型:

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

视图模型:

public class Parent 
{ 
    public string ChildName 
} 

使用上面例子的EF查询将返回父母,我会转换为查看模型的列表欢送到客户。当对ChildName进行排序请求时,odata失败,因为Parent没有ChildName的概念。我需要将ChildName映射到Child.Name。我见过使用EntitySets更改名称的人的例子,但没有人会在我的情况下映射模型。

回答

0

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

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

正的,这是它的数据库,所以我不传送不必要的数据上都运行。此外,我可以继续在查询中使用odata选项,因为odata将添加到查询中。但是,我不禁感到这不是最好的方式。

相关问题