![](/img/trans.png)
[英]Reuseable ObjectContext or new ObjectContext for each set of operations?
[英]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
的文檔缺少詳細信息。
我更喜歡指向支持任何答案的官方文檔的鏈接。
DbContext
是ObjectContext
的包裝器。 因此,它包含一個可以通過IObjectContextAdapter
接口訪問的ObjectContext
實例。 IObjectContextAdapter.ObjectContext
將始終返回相同的實例。
如果您想絕對確定,只需檢查
Console.WriteLine(((IObjectContextAdapter)db).ObjectContext.GetHashCode());
Console.WriteLine(((IObjectContextAdapter)db).ObjectContext.GetHashCode());
它將兩次顯示相同的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.