簡體   English   中英

每個結果集的ObjectContext是否都會更改?

[英]Does the ObjectContext change for each result set?

有許多示例顯示了在使用實體框架時如何使用ObjectContext從多結果集存儲過程中獲取結果。
這些示例始終采用DbContext ,將其DbContext轉換為IObjectContextAdapter ,然后獲取ObjectContext ,即使它們在同一行中做了幾行也是如此。

MSDN中的示例(刪除了原始注釋以簡化並突出顯示我的注釋):

using (var db = new BloggingContext())
{
    db.Database.Initialize(force: false);
    var cmd = db.Database.Connection.CreateCommand();
    cmd.CommandText = "[dbo].[GetAllBlogsAndPosts]";
    try
    {
        db.Database.Connection.Open();
        var reader = cmd.ExecuteReader();
        var blogs = ((IObjectContextAdapter)db)
            .ObjectContext                                              //First Time
            .Translate<Blog>(reader, "Blogs", MergeOption.AppendOnly);
        foreach (var item in blogs)
        { 
            Console.WriteLine(item.Name);
        }

        reader.NextResult();
        var posts = ((IObjectContextAdapter)db)
            .ObjectContext                                              //Second Time
            .Translate<Post>(reader, "Posts", MergeOption.AppendOnly);

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

我的存儲過程返回了許多結果集,因此我想通過將對ObjectContext的引用復制到局部變量中來盡可能地簡化代碼,但是我不確定這樣做是否會引起問題。
我確實找到了一篇文章 ,指出“在概念上'DbContext'與'ObjectContext'相同。”
我沒有發現任何明確指示對象實例范圍和生存期的東西。
ObjectContext的文檔缺少詳細信息。

我更喜歡指向支持任何答案的官方文檔的鏈接。

DbContextObjectContext的包裝器。 因此,它包含一個可以通過IObjectContextAdapter接口訪問的ObjectContext實例。 IObjectContextAdapter.ObjectContext將始終返回相同的實例。

如果您想絕對確定,只需檢查

Console.WriteLine(((IObjectContextAdapter)db).ObjectContext.GetHashCode());
Console.WriteLine(((IObjectContextAdapter)db).ObjectContext.GetHashCode());

它將兩次顯示相同的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM