【问题标题】:ExecuteStoreQuery EntityFrameworkExecuteStoreQuery 实体框架
【发布时间】:2013-11-05 18:27:11
【问题描述】:

params object[] 的新手...并想尝试来自 Returning a DataTable using Entity Framework ExecuteStoreQuery 的建议

如何使用 Entity Framework 将这些参数 (guid gId, string sName) 传递给存储过程?这是我想尝试的,因为我需要返回一个数据表。

public DataTable ExecuteStoreQuery(string commandText, params Object[] parameters)
{
   DataTable retVal = new DataTable();
   retVal = context.ExecuteStoreQuery<DataTable>(commandText, parameters).FirstOrDefault();    
   return retVal;
}

【问题讨论】:

  • 使用 Entity Framework 的整个要点是让您不必搞乱DataTable和列/行 - 而是您可以改用漂亮的 .NET 对象!不要再试图让 EF 返回 DataTable 了!更改您的设计以能够使用实体(及其集合)

标签: c# entity-framework-4


【解决方案1】:

正如您链接到的问题/答案告诉您的那样,ExecuteStoreQuery 返回 entities - 它不能返回 DataTable

可以使用它返回实体集合,然后使用DataTableExtensions 将其转换为DataTable

public DataTable ExecuteStoreQuery(string commandText, params Object[] parameters)
{
   DataTable retVal;

   var entities = context.ExecuteStoreQuery<MyEntity>(commandText, parameters)
                          .Take(1); // use `Take` instead of `First` to keep it as a collection
   retVal = entities.AsEnumerable().CopyToDataTable();
   return retVal;
}

params 而言,这只是让您在方法调用中将值串在一起,而不是将它们打包在object[] 中:

DataTable dt = ExecuteStoreQuery("SELECT * FROM...", guid, sName);

【讨论】:

    【解决方案2】:
    The idea of params (which always has to be the last decalared parameter in a function can be unlimited for example
    
    Function Foo(string s,params Object[] alist)
    {
        //whatever
    }
    
    Cats cat = new Cats();//I put an object here because cat is an object, if it was ints they would all have to be ints
    Foo("ok",cat);
    Foo("ok", cat,cat,cat,cat,cat,cat);
    
    are both valid
    

    是这个想法,但你会想要传递 SQL 参数,所以......

                dt = ExecuteStoreQuery("INSERT INTO STATUS(ITEMTYPE,PRODESC) values(@ITEMTYPE,'@PRODESC')",new SqlParameter("@ITEMTYPE", 2),new SqlParameter("@PRODESC", "Obama sucks"));
    

    或更多的衬里让我看得更清楚

            object[] obj;
            obj[0] = new SqlParameter("@ITEMTYPE", 2);
            obj[1] = new SqlParameter("@PRODESC", "Obama sucks");
            dt = ExecuteStoreQuery("INSERT INTO STATUS(ITEMTYPE,PRODESC) values(@ITEMTYPE,'@PRODESC')",obj);
    

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2020-04-11
      • 1970-01-01
      • 2015-12-26
      相关资源
      最近更新 更多