sql >> Database >  >> RDS >> Sqlserver

Verwerk meerdere resultaten van een opgeslagen procedure met SqlQuery

De DbContext heeft geen native ondersteuning voor het realiseren van meerdere resultatensets. Het is echter redelijk eenvoudig te bereiken door naar de ObjectContext . te gaan en met behulp van de Translate methode om resultaten te kopiëren van een DbDataReader in entiteiten in uw domeinmodel.

Hier is een voorbeeldcode. Dit veronderstelt uw ReferrerStatisticResult is slechts een container voor de twee lijsten genaamd Set1 en Set2 . Uiteraard aanpassen volgens uw huidige domeinmodel.

// 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. Dynamische tabelnaam voor SQL-query in FOR

  2. Is LAST_INSERT_ID() in een transactie betrouwbaar?

  3. Waarom krijg ik PLS-00302:component moet worden aangegeven als het bestaat?

  4. MySQL:alle kolommen in een tabel selecteren plus één kolom uit dezelfde tabel