Le DbContext
n'a pas de support natif pour matérialiser plusieurs jeux de résultats. Cependant, il est raisonnablement simple à réaliser en descendant jusqu'à ObjectContext
et en utilisant le Translate
méthode pour copier les résultats d'un DbDataReader
en entités dans votre modèle de domaine.
Voici un exemple de code. Cela suppose votre ReferrerStatisticResult
est juste un conteneur pour les deux listes appelées Set1
et Set2
. Ajustez évidemment en fonction de votre modèle de domaine actuel.
// 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();
}
}