【问题标题】:ObjectSet and ResultSet on stored procedure on EF and Domain ServiceEF 和域服务中存储过程中的 ObjectSet 和 ResultSet
【发布时间】:2011-03-17 23:10:03
【问题描述】:

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

public IQueryable GetEmployee() { 返回 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”

如何实现这个请求?

【问题讨论】:

    标签: entity-framework wcf-ria-services domainservices


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。 EFExtensions 提供的解决方案不是我想要的。它为您提供来自 SP 的多个结果集,就像您在 SP 中有多个选择一样。但我想要的是获取包含所有查找数据的实体集。就像 ObjectSet 的包含一样。例如,Employee 可能包含 3 个查找表外键:DepartmentID、RoleID、GenderID。我
    • 实体框架无法实现您想要的。就像我说的,存储过程函数导入只会返回一种实体类型,并且不能包含它的查找数据。
    • 感谢您的信息。找出一种解决方案:在代码中手动加载查找。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多