2

在 EF 4 中,默认 ObjectSet 可用于每个实体。比如我有表Employee,生成Entity Model后,EF会在Employee上创建ObjectSet。那么当使用 wcf ria 服务时,默认查询会是这样的:

public IQueryable GetEmployee() { return this.ObjectContext.Employees; }

使用 objectSet,我可以将 include 应用于结果,例如:

    return this.ObjectContext.Employees.Include("Department");

然后我创建一个存储过程说 MySearchForEmployee 并将其作为函数导入。结果映射到实体 Employee。调用该函数时,结果将是 ResultSet,而不是 ObjectSet。

我想通过调用以下存储过程来为域服务提供类似的方法:

   public IQueryable<Employeer> GetMySearch(string keyword)
        {
            return this.ObjectContext.MySearchForEmployee(keyword).Include("Department");
        }

但我不能因为上面的代码事件不能通过语法检查。

我尝试了以下方法来转换结果类型:

 var results = this.ObjectContext.MySearchForEmployee(keyword);
 var objsets = (ObjectSet<Employee>) results;

然后我得到错误:无法将类型'System.Data.Objects.ObjectResult'转换为'System.Data.Objects.ObjectSet'

如何实现这个要求?

4

1 回答 1

0

没有理由使用 ObjectSet,因为您不能在一个存储过程的查询中包含多个实体集。这在实体框架中不受支持。

您可以尝试EFExtensions项目,它具有从一个查询加载多个实体集的扩展。

于 2010-07-19T18:37:45.773 回答