sql >> Database teknologi >  >> RDS >> Sqlserver

Håndter flere resultater fra en lagret procedure med SqlQuery

DbContext har ingen indbygget støtte til at materialisere flere resultatsæt. Det er dog rimeligt ligetil at opnå ved at gå ned til ObjectContext og ved at bruge Translate metode til at kopiere resultater fra en DbDataReader ind i enheder i din domænemodel.

Her er et eksempel på kode. Dette forudsætter dit ReferrerStatisticResult er kun en beholder for de to lister kaldet Set1 og Set2 . Juster naturligvis i henhold til din faktiske domænemodel.

// 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. SQL flere kolonner i IN-sætning

  2. onCreate() af RoomDatabase.Callback() blev ikke kaldt efter et vellykket kald til .build()

  3. Bestil inden for gruppe af?

  4. JSON-funktioner og -operatører i SQLite (fuld liste)