sql >> Databáze >  >> RDS >> Sqlserver

Zpracování více výsledků z uložené procedury pomocí SqlQuery

DbContext nemá žádnou nativní podporu pro materializaci více sad výsledků. Je však poměrně přímočaré, čeho lze dosáhnout přetažením dolů na ObjectContext a pomocí Translate metoda pro kopírování výsledků z DbDataReader do entit v modelu vaší domény.

Zde je nějaký příklad kódu. To předpokládá váš ReferrerStatisticResult je pouze kontejner pro dva seznamy s názvem Set1 a Set2 . Samozřejmě upravte podle vašeho skutečného modelu domény.

// 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. Jak získat hodnoty jednoho sloupce pomocí MySQLi?

  2. Jaké je použití funkce DECODE v SQL?

  3. Práce kolem zmeškaných optimalizací

  4. SQL Server Vysoká dostupnost:Přidejte nový disk do existující instance clusteru s podporou převzetí služeb při selhání