DbContext
har inget inbyggt stöd för att materialisera flera resultatuppsättningar. Det är dock ganska enkelt att uppnå genom att gå ner till ObjectContext
och använda Translate
metod för att kopiera resultat från en DbDataReader
till enheter i din domänmodell.
Här är lite exempelkod. Detta förutsätter ditt ReferrerStatisticResult
är bara en behållare för de två listorna som heter Set1
och Set2
. Justera självklart efter din faktiska domänmodell.
// 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();
}
}