2012-11-27 45 views
2

说我得到了这样的情况:我有过滤我的数据实体这是我从一个存储过程中得到的一个:如何查询存储过程的对象使用LINQ

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. 我得到一个InvalidOperationException时码罢工日ËExcecuteFunction行:

    的FunctionImport 'XXX' 不能在容器中发现的 'XXX'

  2. 假设你们可以帮助我解决这个问题,是否有可能这样查询?像上下文实体一样使用这些存储过程结果?我认为英孚不会允许这会导致它不是一个实体,也不是一个“恒定价值”。

我正在使用EF 4.3。

回答

1

,而不是调用你的程序一样,通过名称作为字符串,你可以在你的实体模型导入它,那么你可以在你的DbContext直接有一个类型安全/强类型的方法调用。

基本上你需要执行一个功能入口,在这里看到了一个例子:Using stored procedures with Entity Framework

更新:对于POCO /代码首先,在这里看到:我使用POCO EF Code-First - Mapping stored procedures

+0

。模型创建数据库,但是您知道是否可以使用POCO定义存储过程或视图? –

+0

谢谢!不过,我已经试过了,'SqlQuery'方法的结果将不会用于查询工作(由于我对第2项命名的原因,它不是一个实体或一个恒定值)。任何其他想法? –

+0

好的我已经做了它从存储过程返回一个id列表。这样linq理解它可以很好地查询。谢谢我会发布答案。 –