具有匿名类型的实体框架ExecuteStoreQuery

时间:2015-06-12 19:44:20

标签: c# entity-framework anonymous-types

我尝试创建一个通用方法,通过一个存储过程从SQL Server获取数据,但它不会返回任何数据:

public static IEnumerable<T> Select<T>(string SQL)  
{
  string spName = "exec spGetData @SQL";
  var parametros = new object[]{
                                new SqlParameter("@SQL", SQL)
                              };
  IEnumerable<T> result;
  using (DBContext db = new DBContext())
  {
    result = from a in db.ObjectContext.ExecuteStoreQuery<T>(spName, parametros).ToList() select a;
  }
  return result;
}

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

EF处理存储过程,并从存储的proc结果选择的函数映射创建实体结果集,以便从EF上下文中消耗。

步骤

  1. 在设计师中选择“从数据库更新模型”。
  2. 当你到达允许添加表/视图/存储过程的页面时,选择存储的感兴趣的过程。
  3. 向导完成后,EF将包含Client client = ClientBuilder.newClient().register(MyFormProvider.class); 中存储的过程,可以通过右键单击EF设计图面并选择Model Browser来显示。
  4. Model Browser中寻找存储过程的Model Browser - &gt; Model Store文件夹。通过查看Stored Procedures / Functions - &gt;验证映射是否良好。 Model并且可以在Function Imports文件夹中找到结果实体。
  5. 从那里你可以从EF上下文中调用你的存储过程,它会将结果集的列表返回给代码。

    我在博客文章中给出了更全面的解释,并提供了有关复杂实体失败的一些问题的提示和解决方法:Entity Framework Stored Procedure Instructions