我使用的系统有许多需要显示的存储过程。为我的每个对象创建实体是不切实际的。
可以吗?我如何使用ExecuteStoreQuery返回DataTable?
public ObjectResult<DataTable> MethodName(string fileSetName) {
using (var dataContext = new DataContext(_connectionString))
{
var returnDataTable = ((IObjectContextAdapter)dataContext).ObjectContext.ExecuteStoreQuery<DataTable>("SP_NAME","SP_PARAM");
return returnDataTable;
}发布于 2011-01-04 01:45:59
不,我不认为这是可行的-实体框架是面向返回实体的,并不意味着返回DataTable对象。
如果您需要DataTable对象,请改用直接ADO.NET。
发布于 2012-07-02 19:03:45
是的,这是可能的,但它应该仅用于动态结果集或原始SQL。
public DataTable ExecuteStoreQuery(string commandText, params Object[] parameters)
{
DataTable retVal = new DataTable();
retVal = context.ExecuteStoreQuery<DataTable>(commandText, parameters).FirstOrDefault();
return retVal;
}编辑:使用经典的ADO.NET获取数据模型比使用实体框架更好,因为即使可以运行以下方法,也很可能无法使用DataTable:context.ExecuteStoreQuery<DataTable>(commandText, parameters).FirstOrDefault();
ADO.NET示例:
public DataSet GetResultReport(int questionId)
{
DataSet retVal = new DataSet();
EntityConnection entityConn = (EntityConnection)context.Connection;
SqlConnection sqlConn = (SqlConnection)entityConn.StoreConnection;
SqlCommand cmdReport = new SqlCommand([YourSpName], sqlConn);
SqlDataAdapter daReport = new SqlDataAdapter(cmdReport);
using (cmdReport)
{
SqlParameter questionIdPrm = new SqlParameter("QuestionId", questionId);
cmdReport.CommandType = CommandType.StoredProcedure;
cmdReport.Parameters.Add(questionIdPrm);
daReport.Fill(retVal);
}
return retVal;
}发布于 2013-10-12 02:00:10
此方法使用实体框架中的连接字符串建立到MySQL数据库的ADO.NET连接。
using MySql.Data.MySqlClient;
public DataSet GetReportSummary( int RecordID )
{
var context = new catalogEntities();
DataSet ds = new DataSet();
using ( MySqlConnection connection = new MySqlConnection( context.Database.Connection.ConnectionString ) )
{
using ( MySqlCommand cmd = new MySqlCommand( "ReportSummary", connection ) )
{
MySqlDataAdapter adapter = new MySqlDataAdapter( cmd );
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
adapter.SelectCommand.Parameters.Add( new MySqlParameter( "@ID", RecordID ) );
adapter.Fill( ds );
}
}
return ds;
}https://stackoverflow.com/questions/4586834
复制相似问题