Entity Framework Context上下文管理(CallContext 数据槽)
Context上下文管理
Q1:脏数据
Q2:一次逻辑操作中,会多次访问数据库,增加了数据库服务器的压力
>在一次逻辑操作中实现上下文实例唯一
方法一:单例模式:内存的爆炸式增长
在整个运行期间是静态的,保持加载对象不会被回收,所有跟踪的对象也都不会被回收
方式二:CallContext(线程数据槽):
1:线程独享的数据槽。2:集合结构 (web也可以使用HttpContext)
CallContext 类 (System.Runtime.Remoting.Messaging)_files 链接: http://pan.baidu.com/s/1c2LRbmo 密码: 52zp
对比使用EF与ADO.NET
优点:开发简单快捷,强大的模型设计,跨数据库支持
缺点:效率低(把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();
Console.WriteLine(item.customerName); Console.ReadKey();
}
} public class Test1
{
public void Add()
{
DbContext context = CallContextFactory.GetContext();
var item = context.Set<CustomerInfo>().Find();
item.customerName += "";
}
} public class Test2
{
public void Add()
{
DbContext context = CallContextFactory.GetContext();
var item = context.Set<CustomerInfo>().Find();
item.customerName += "";
}
}
}
最后输出结果为 item.customerName+"12"; 这样在一次逻辑操作中,通过CallContext数据槽,可以实现线程类实例唯一的功能,保证数据的正确性。
Entity Framework Context上下文管理(CallContext 数据槽)的更多相关文章
- Entity Framework一对多关系添加数据的两种方式
当使用Entity Framework添加一对多关系数据的时候,通常先添加一的数据,然后再添加多的数据.类似这样: //添加一的数据 var category = new Category{Name= ...
- Entity Framework context per request
原文发布时间为:2011-09-24 -- 来源于本人的百度文章 [由搬家工具导入] http://www.blog.cyberkinetx.com/2011/05/15/entity-framewo ...
- Entity Framework(六):数据迁移
在前面的几篇文章中,简单的介绍了如何使用Entity Framework的Code First模式创建数据库,但是,在前面的几篇文章中,我们都是通过使用数据库初始化策略来做,也就是每次先删除数据库然后 ...
- Entity Framework 5.0系列之数据操作
Entity Framework将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象:跟踪对象所做的更改:并发处理:将对象更改传播到数据源等.今天我们就一起讨论如何 ...
- Entity Framework Code First实体关联数据加载
在项目过程中,两个实体数据之间在往往并非完全独立的,而是存在一定的关联关系,如一对一.一对多及多对多等关联.存在关联关系的实体,经常根据一个实体的实例来查询获取与之关联的另外实体的实例. Entity ...
- Entity Framework 程序设计入门二 对数据进行CRUD操作和查询
前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...
- Entity Framework应用:管理并发
理解并发 并发管理解决的是允许多个实体同时更新,实际上这意味着允许多个用户同时在相同的数据上执行多个数据库操作.并发是在一个数据库上管理多个操作的一种方式,同时遵守了数据库操作的ACID属性(原子性. ...
- Entity Framework 之Code First自动数据迁移
using MvcShopping.Migrations; using MvcShopping.Models; using System; using System.Collections.Gener ...
- Entity Framework Code First Migrations--EF 的数据迁移
1. 为了演示方便,首先新建一个控制台项目,然后添加对entityframework的引用 使用nuget控制台执行: Install-Package EntityFramework 2.新建一个实体 ...
随机推荐
- kafka重新启动时出现:found a corrupted index file due to requirement failed问题解决方法
问题如下: 解决方法: 删除kafka目录下的日志文件即可解决
- java异常处理-finally中使用return和throw语句
java异常语句中的finally块通常用来做资源释放操作,如关闭文件.关闭网络连接.关闭数据库连接等.正常情况下finally语句中不应该使用return语句也不应该抛出异常,以下讨论仅限于java ...
- 《编写高质量代码改善JavaScript程序的188个建议》读书笔记
逗号运算符比较怪异.如 var a =(1,2,3,4);alert(a);// 4 var a = 1,2,3,4;//报错 注意a++和++a的差别,变量在参与运算中不断地变化.v ...
- NOIP2017 心路历程
虽然没能去考试,但是在学弟们考试前后也发生了很多事情. 周四晚上.学弟们出发前最后一天.单独找几个人谈了谈.面对退役他们还是有点慌啊.这个时候给他们调整心态或许有点迟了. 21:45.最后一分钟.为他 ...
- 【刷题】BZOJ 2346 [Baltic 2011]Lamp
Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...
- 网络对抗课题4.3.1 SQL注入原理与实践
网络对抗课题4.3.1 SQL注入原理与实践 原理 SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符 ...
- Android 系统回收资源时进程被杀的优先级
http://developer.android.com/guide/components/processes-and-threads.html#Processes Android 操作系统的内存回收 ...
- bzoj 3672 购票 点分治+dp
3672: [Noi2014]购票 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1177 Solved: 562[Submit][Status][ ...
- 牛客网NOIP赛前集训营-普及组(第一场)
前三题略 T4: 题目描述 小A有n个长度都是L的字符串.这些字符串只包含前8个小写字符,'a'~'h'.但这些字符串非常的混乱,它们几乎长得互不相同.小A想通过一些规则,让它们长得尽可能相同.小A现 ...
- Jenkins(一)---我理解的jenkins是这样的
1.齿轮 如果将 java / maven / ant / git / tomcat / jenkins 等等软件比喻为齿轮:如下图 两个软件在一起可以驱动另外一个软件:如下图 如果把这些软件要集成在 ...