如何使用Linq查询存储过程对象

时间:2012-11-27 21:07:34

标签: c# linq entity-framework

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

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:

      

    FunctionImport&#39; xxx&#39;无法在容器中找到&#39; xxx&#39;

  2. 假设你们可以帮助我解决这个问题,是否有可能以这种方式进行查询?使用那些存储过程结果像上下文实体?我认为EF不会允许这不是因为它不是实体,也不是&#34;常数价值&#34;。

  3. 我使用的是EF 4.3。

1 个答案:

答案 0 :(得分:1)

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

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

更新:首先是POCO /代码,请参见此处:EF Code-First - Mapping stored procedures