说我遇到了这种情况:我必须使用从存储过程中获取的数据来过滤我的一个实体:
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");
}
到目前为止,我遇到了两个问题:
当代码到达ExcecuteFunction行时,我收到InvalidOperationException:
FunctionImport&#39; xxx&#39;无法在容器中找到&#39; xxx&#39; 。
假设你们可以帮助我解决这个问题,是否有可能以这种方式进行查询?使用那些存储过程结果像上下文实体?我认为EF不会允许这不是因为它不是实体,也不是&#34;常数价值&#34;。
我使用的是EF 4.3。
答案 0 :(得分:1)
而不是通过名称作为字符串调用您的过程,您可以在实体模型中导入它,然后您可以直接在DbContext上进行类型安全/强类型方法调用。
基本上你需要执行一个函数导入,参见这里的例子:Using stored procedures with Entity Framework
更新:首先是POCO /代码,请参见此处:EF Code-First - Mapping stored procedures