In order to retrieve different result sets being returned by the stored procedure we have to use this:
UsersPhonesDBContext.Database.Initialize(force: false);
DbConnection con = UsersPhonesDBContext.Database.Connection;
var cmd = con.CreateCommand();
cmd.CommandText = "[dbo].[SelectPhones]";
con.Open();
var reader = cmd.ExecuteReader();
Phones phones = ((IObjectContextAdapter)UsersPhonesDBContext)
.ObjectContext
.Translate<Phones>(reader, "Phones", MergeOption.AppendOnly).First();
reader.NextResult();
Users users = ((IObjectContextAdapter)UsersPhonesDBContext)
.ObjectContext
.Translate<Users>(reader, "Users", MergeOption.AppendOnly).First();
But if the procedure is returning a single result set then we can simply do that with
var phones1 = UsersPhonesDBContext.Database.SqlQuery<Phones>("dbo.InsertPhones @model", sqlParam);
without creating, opening and closing DB connection etc.
So my question is that why do we have to create & open connections if multiple sets but not for the single since both are accessed from the database.