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数据槽,能够实现线程类实例惟一的功能,保证数据的正确性。