如何返回多个表的查询实体

时间:2011-02-10 16:20:37

标签: c# wcf linq entity-framework

我有一个使用Entity Framework进行存储的Web服务,并为CRUD操作公开了一个公共API。

如果我有一个像User这样与Car实体有1对多关系的实体,我如何轻松地在GetUser(int userId)的web服务方法中返回一个如下所示的用户实例:

public class User{
  string Id;
  IEnumberable<Car> Cars;
}

这是否在实体框架中默认工作,因为我假设在服务器端使用它时Cars属性是惰性的。

3 个答案:

答案 0 :(得分:2)

实体对象是可序列化的,您将自动获取Cars属性。

但是,根据您的LINQ查询,可能已加载或未加载Cars属性。如果您总是希望在给定的Web方法中加载Cars属性,那么您应该显式加载该属性。以下几种方法可以保证您加载Cars属性。

1)在LINQ查询中使用Include(“Cars”)方法。

2)使用投影。

3)在User对象的实例上显式加载Cars属性。例如,

userA.Cars.Load()

答案 1 :(得分:2)

首先,您应该[Include]汽车在User实体的元数据定义。此外,您可能需要重写getUsers()方法来填充汽车。这样的事情。

public IQueryable<User> GetUsers()
{
    return this.ObjectContext.User.Include("Cars");
}

不久之后解释起来并不容易,我建议您访问thisthis个网站。

希望有所帮助!

答案 2 :(得分:0)

我已经使用LINQ-To-SQL来实现类似的结果,对我来说它“只是起作用”。我试试看看会发生什么。您可能需要在项目上明确定义[DataContract]