18

表示する必要のあるストアド プロシージャが多数あるシステムを使用しています。オブジェクトごとにエンティティを作成するのは現実的ではありません。

それは可能で、どのようにDataTableusingを返しExecuteStoreQueryますか?

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;
}
4

8 に答える 8

18

はい、可能ですが、動的な結果セットまたは生の SQL だけに使用する必要があります。

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

編集: Entity Framework を使用するよりも、従来の 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;
}
于 2012-07-02T11:03:44.700 に答える
12

いいえ、うまくいかないと思います.Entity FrameworkはエンティティDataTableを返すことを目的としており、オブジェクトを返すことを意図していません。

オブジェクトが必要な場合はDataTable、代わりにストレート ADO.NET を使用してください。

于 2011-01-03T17:45:59.140 に答える
8

このメソッドは、エンティティ フレームワークからの接続文字列を使用して、この例では 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;
}
于 2013-10-11T18:00:10.347 に答える
1

EntityFramework を使用して DataTable を返す最も簡単な方法は、次の手順を実行することです。

MetaTable metaTable = Global.DefaultModel.GetTable("Your EntitySetName");

例えば:

MetaTable metaTable = Global.DefaultModel.GetTable("Employees");
于 2011-07-12T11:45:44.550 に答える
0

ストアド プロシージャが複合型を返す可能性はありますか? http://blogs.msdn.com/b/somasegar/archive/2010/01/11/entity-framework-in-net-4.aspx

于 2011-01-03T18:00:44.707 に答える