Возврат нескольких наборов результатов с хранилищем EntityFramework

Я работаю над кодом, где мне нужно несколько таблиц в результате хранимой процедуры. Я использую шаблон хранилища Entity Framework. Он возвращает и связывает объект IEnumerable, но мне нужно связать его с несколькими IEnumerables одновременно. Кто-нибудь может помочь?

Это код, который я использую: db.Database.SqlQuery("procReturnsMultipleResuiltSets")

1 ответ

Способы достижения вашей цели раскрыты в этой статье.

Из связанной статьи наиболее распространенным способом является:

using (var db = new BloggingContext()) 
{ 
// If using Code First we need to make sure the model is built before we open the connection 
// This isn't required for models created with the EF Designer 
db.Database.Initialize(force: false); 

// Create a SQL command to execute the sproc 
var cmd = db.Database.Connection.CreateCommand(); 
cmd.CommandText = "[dbo].[GetAllBlogsAndPosts]"; 

try 
{ 

    db.Database.Connection.Open(); 
    // Run the sproc  
    var reader = cmd.ExecuteReader(); 

    // Read Blogs from the first result set 
    var blogs = ((IObjectContextAdapter)db) 
        .ObjectContext 
        .Translate<Blog>(reader, "Blogs", MergeOption.AppendOnly);    


    foreach (var item in blogs) 
    { 
        Console.WriteLine(item.Name); 
    }         

    // Move to second result set and read Posts 
    reader.NextResult(); 
    var posts = ((IObjectContextAdapter)db) 
        .ObjectContext 
        .Translate<Post>(reader, "Posts", MergeOption.AppendOnly); 


    foreach (var item in posts) 
    { 
        Console.WriteLine(item.Title); 
    } 
} 
finally 
{ 
    db.Database.Connection.Close(); 
} 
}

обратите внимание на важное замечание: первый набор результатов должен быть использован перед переходом к следующему набору результатов.

Другие вопросы по тегам