2016-12-19 8 views
1

新しいasp.netの新しいコアサイトのMySQLデータベースライブラリを作成しようとしています。 DatatableとDataSetを使用して、MVC5日に同様のパターンを使用しました。これらの恐ろしいデータ構造はCoreから削除されました。そして私は、複数の結果セットを持つクエリを実行する最良の方法が何であるか疑問に思っていました。例えばMySQLを使用したマルチクエリの実行.Net Core ADO

public static IEnumerable<IEnumerable<IDataRecord>> ExecuteMultiQuery(MySqlConnection connection, CommandType commandType, string commandText, params MySqlParameter[] commandParameters) { 

     var returnObject = new List<List<IDataRecord>>(); 

     using (MySqlCommand command = PrepareCommand(connection, commandType, commandText, commandParameters)) { 
      try { 
       connection.Open(); 

       command.Prepare(); 

       MySqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection); 

       do { 

        List<IDataRecord> resultSet = new List<IDataRecord>(); 

        while (reader.Read()) { 
         resultSet.Add(reader); 
        } 

        returnObject.Add(resultSet); 

       } while (reader.NextResult()); 

      } 
      finally { 
       connection.Close(); 
      } 

      command.Parameters.Clear(); 

     } 

     return returnObject; 
    } 

はしかし、コードをステップ実行しながら、私は、コレクションが実際にどのようなデータを保持しないことに気づきます。私は私のストアドプロシージャをテストし、これは正しく必要な行を返します。また、私はPOCOバインディングを担当するDapperに似たオーダーメードのマイクロORMを持っています。私はそれに満足しており、外部のナゲットパッケージに頼ることは望まない。

私はただのガイダンスが最もいただければ幸いです...

の方法は、コレクションを満たしていない理由を理解することはできません。

P.S PrepareCommandメソッド呼び出しはプライベートであり、正しく挿入されたMySqlCommandにparamsを単に返すだけです。

P.P.Sこれは面倒なバインディングタイムを伴うひどいフレームワークなので、EFは私に言及しないでください。私は類似のExecuteReaderメソッドを約75-90msでバインドすることができます(Dapperは高速ではありませんが速くはない)ので、私は他のシナリオで作成したDBUtiltiyを知っています。

おかげで、すべての

答えて

0

まあ、それはしばらくしてここでしか雑草をタンブルています。しかし、私は古いバージョンのDataSet、DataTableライブラリ、Transactionsを含む新しいバージョンのCoreを待つことを提案できます。

回避策として、IEnumerableを返し、反射を使用してPOCOを設定します。汚いですが、コアが完全に形成されたフレームワークになるまでは、妥協することになります。

関連する問題