2

假设我遇到了这种情况:我必须使用从存储过程中获得的数据过滤我的一个实体:

var results = from c in db.Customer
join p in db.GetSPResults() on c.Id equals p.Id
select c;

在我的 Context 课上,我得到了这个:

public ObjectResult<Example> GetSPResults()
{
    return (this as IObjectContextAdapter).ObjectContext.ExecuteFunction<Example>("Proc_Example");
}

到目前为止,我遇到了两个问题:

  1. 当代码到达 ExcecuteFunction 行时,我得到一个 InvalidOperationException:

    在容器 'xxx' 中找不到 FunctionImport 'xxx'

  2. 假设你们可以帮助我解决这个问题,是否可以这样查询?像上下文实体一样使用那些存储过程结果?我认为 EF 不允许这样做,因为它不是实体,也不是“常量值”。

我正在使用 EF 4.3。

4

1 回答 1

1

而不是通过名称作为字符串调用您的过程,您可以将其导入实体模型中,然后您可以直接在 DbContext 上调用类型安全/强类型的方法。

基本上你需要执行一个函数导入,见这里的例子:Using stored procedures with Entity Framework

更新:对于 POCO / Code first,请参见此处:EF Code-First - 映射存储过程

于 2012-11-27T21:28:40.073 回答