sql >> データベース >  >> RDS >> Sqlserver

SqlQueryを使用してストアドプロシージャからの複数の結果を処理する

    DbContext 複数の結果セットを具体化するためのネイティブサポートはありません。ただし、ObjectContextにドロップダウンすることで達成するのはかなり簡単です。 Translateを使用します DbDataReaderから結果をコピーするメソッド ドメインモデルのエンティティに。

    ここにいくつかのサンプルコードがあります。これは、ReferrerStatisticResultを前提としています Set1と呼ばれる2つのリストの単なるコンテナです およびSet2 。明らかに、実際のドメインモデルに応じて調整してください。

    // Create container ready for the resultsets
    var result = new RefererStatisticResult();
    
    using (var myContext = new MyContext())
    {
        // Create command from the context in order to execute
        // the `GetReferrer` proc
        var command = myContext.Database.Connection.CreateCommand();
        command.CommandType = System.Data.CommandType.StoredProcedure;
        command.CommandText = "[dbo].[GetReferrer]";
        // add in command parameters
        // (not shown)
    
        try
        {
            myContext.Connection.Open();
            var reader = command.ExecuteReader();
    
            // Drop down to the wrapped `ObjectContext` to get access to
            // the `Translate` method
            var objectContext = ((IObjectContextAdapter)myContext).ObjectContext;
    
            // Read Entity1 from the first resultset
            result.Set1 = objectContext.Translate<Entity1>(reader, "Set1", MergeOptions.AppendOnly);
    
            // Read Entity2 from the second resultset
            reader.NextResult();
            result.Set2 = objectContext.Translate<Entity2>(reader, "Set2", MergeOptions.AppendOnly);        
        }
        finally
        {
            myContext.Database.Connection.Close();
        }
    }
    


    1. MySQLコマンドExplain無視LIMIT?

    2. SQLiteクエリ結果に列名を含める

    3. SQLのマッチングアルゴリズム

    4. MySQL DECIMALの使用方法は?