Context上下文管理html
Q1:髒數據web
Q2:一次邏輯操做中,會屢次訪問數據庫,增長了數據庫服務器的壓力數據庫
>在一次邏輯操做中實現上下文實例惟一服務器
方法一:單例模式:內存的爆炸式增加測試
在整個運行期間是靜態的,保持加載對象不會被回收,全部跟蹤的對象也都不會被回收spa
方式二:CallContext(線程數據槽):線程
1:線程獨享的數據槽。2:集合結構 (web也能夠使用HttpContext)設計
CallContext 類 (System.Runtime.Remoting.Messaging)_files 連接: http://pan.baidu.com/s/1c2LRbmo 密碼: 52zpcode
對比使用EF與ADO.NEThtm
優勢:開發簡單快捷,強大的模型設計,跨數據庫支持
缺點:效率低(把EF操做轉換爲SQL語句)
1:使用EntityFramework Database First方式建立CustomerInfo表格數據映射
Entity Framework(EF的Database First方法) :http://www.cnblogs.com/Dr-Hao/p/5367147.html
2:新建ContextFactory.cs封裝工廠類
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading.Tasks; namespace CallContextTest { public class CallContextFactory { public static DbContext GetContext() { //經過CallContext數據槽,能夠實現線程類實例惟一的功能 DbContext context = CallContext.GetData("context") as DbContext; if (context==null) { context = new MyFirstEFEntities(); CallContext.SetData("context",context); } //每次都新建上下文對象,在一次邏輯操做中,沒法保證數據的正確性 //DbContext context = new MyFirstEFEntities(); return context; } } }
3:Program.cs 程序中的測試代碼
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CallContextTest { class Program { static void Main(string[] args) { Test1 test1 = new Test1(); test1.Add(); Test2 test2 = new Test2(); test2.Add(); DbContext context = CallContextFactory.GetContext(); var item = context.Set<CustomerInfo>().Find(1); Console.WriteLine(item.customerName); Console.ReadKey(); } } public class Test1 { public void Add() { DbContext context = CallContextFactory.GetContext(); var item = context.Set<CustomerInfo>().Find(1); item.customerName += "1"; } } public class Test2 { public void Add() { DbContext context = CallContextFactory.GetContext(); var item = context.Set<CustomerInfo>().Find(1); item.customerName += "2"; } } }
最後輸出結果爲 item.customerName+"12"; 這樣在一次邏輯操做中,經過CallContext數據槽,能夠實現線程類實例惟一的功能,保證數據的正確性。