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.新建一个实体 ...
随机推荐
- 【问底】徐汉彬:PHP7和HHVM的性能之争 (真是学到了很多)
来源:http://www.csdn.net/article/2014-12-25/2823234 作者:徐汉彬 摘要:近日,PHP7和HHVM的性能之争成为了一个讨论热点,但毫无疑问,它们都在提升P ...
- SpringBoot(十一)_springboot热部署
在开发中,后台修改了代码就要重新启动服务,很是费劲,现在我们可以让SpringBoot自动编译 热启动就需要用到我们在一开始引入的另外一个组件:devtools.它是 Spring Boot 提供的一 ...
- 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离
数据结构中一直对二叉树不是很了解,今天趁着这个时间整理一下 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显 ...
- 再谈 最速下降法/梯度法/Steepest Descent
转载请注明出处:http://www.codelast.com/ 最速下降法(又称梯度法,或Steepest Descent),是无约束最优化领域中最简单的算法,单独就这种算法来看,属于早就“过时”了 ...
- python配合Fiddler获取windows app登录时生成cookie实例
工具Fiddler/python3 打开Fiddler,清空一下Fidder里面的请求记录 打开app,进行登录,注意Fiddler里的请求变化 在弹出app登录的时候Fiddler里已经有了四个请求 ...
- Milk Patterns POJ - 3261(后缀数组+二分)
题意: 求可重叠的最长重复子串,但有一个限制条件..要至少重复k次 解析: 二分枚举k,对于连续的height 如果height[i] >= k 说明它们至少有k个元素是重复的,所以判断一下就好 ...
- python中文档IO的读写
首先明确一点,现代计算机的操作系统都不允许程序直接操作磁盘的,所以读取文件和写入文件都是有操作系统提供的提供的接口完成的,每一种编程语言都会把操作系统提供的低级C接口封装起来方便使用,Python也不 ...
- 洛谷P4902乘积
题面链接 洛谷 题意简述 求\(\prod_{i=A}^B\prod_{j=1}^i \lgroup \frac{i}{j} \rgroup ^{\lfloor \frac{i}{j} \rfloor ...
- P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 解题报告
P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 题意 给一个字符串,每次可以从两边中的一边取一个字符,要求取出的字符串字典序最小 可以Hash+二分 也可以S ...
- [Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法(转)
[Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法http://blog.csdn.net/qiujuer/article/details/ ...