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 数据槽)的更多相关文章

  1. Entity Framework一对多关系添加数据的两种方式

    当使用Entity Framework添加一对多关系数据的时候,通常先添加一的数据,然后再添加多的数据.类似这样: //添加一的数据 var category = new Category{Name= ...

  2. Entity Framework context per request

    原文发布时间为:2011-09-24 -- 来源于本人的百度文章 [由搬家工具导入] http://www.blog.cyberkinetx.com/2011/05/15/entity-framewo ...

  3. Entity Framework(六):数据迁移

    在前面的几篇文章中,简单的介绍了如何使用Entity Framework的Code First模式创建数据库,但是,在前面的几篇文章中,我们都是通过使用数据库初始化策略来做,也就是每次先删除数据库然后 ...

  4. Entity Framework 5.0系列之数据操作

    Entity Framework将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象:跟踪对象所做的更改:并发处理:将对象更改传播到数据源等.今天我们就一起讨论如何 ...

  5. Entity Framework Code First实体关联数据加载

    在项目过程中,两个实体数据之间在往往并非完全独立的,而是存在一定的关联关系,如一对一.一对多及多对多等关联.存在关联关系的实体,经常根据一个实体的实例来查询获取与之关联的另外实体的实例. Entity ...

  6. Entity Framework 程序设计入门二 对数据进行CRUD操作和查询

    前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...

  7. Entity Framework应用:管理并发

    理解并发 并发管理解决的是允许多个实体同时更新,实际上这意味着允许多个用户同时在相同的数据上执行多个数据库操作.并发是在一个数据库上管理多个操作的一种方式,同时遵守了数据库操作的ACID属性(原子性. ...

  8. Entity Framework 之Code First自动数据迁移

    using MvcShopping.Migrations; using MvcShopping.Models; using System; using System.Collections.Gener ...

  9. Entity Framework Code First Migrations--EF 的数据迁移

    1. 为了演示方便,首先新建一个控制台项目,然后添加对entityframework的引用 使用nuget控制台执行: Install-Package EntityFramework 2.新建一个实体 ...

随机推荐

  1. PHP导出sql文件

    发现自己之前写的php导出sql数据为Excel文件在导出一些数据的时候出现了精度的问题,比如导出身份证号的时候会把后面变成0000.暂时先把这个问题留下,有空去看看到底是什么问题. 写了一个导出sq ...

  2. lepus天兔数据库监控

    本篇文章的前提是服务器装了mysql服务.git,我这边就不写出来了,自行百度,装下mysql服务,比较简单 一.安装LAMP基础环境 Xampp下载地址:https://www.apachefrie ...

  3. linux下安装jenkins

    我们不用离线安装方式 第一步.必须验证java环境 第二步.我们这里使用yum命令进行在线安装,使用service命令进行启动 1.wget -O /etc/yum.repos.d/jenkins.r ...

  4. Qt4程序在windows平台下打包发布

    一.打包成绿色版 将源码编译成release版,运行*.exe文件,提示缺少*.dll,在Qt安装目录中找到相应的dll文件(一般在bin目录下),将dll文件复制到exe文件目录下即可. 二.打包成 ...

  5. BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)

    一通正常的莫比乌斯反演后,我们只需要求出g(n)=Σf(d)*μ(n/d)的前缀和就好了. 考虑怎么求g(n).当然是打表啊.设n=∏piai,n/d=∏pibi .显然若存在bi>1则这个d没 ...

  6. 何登成大神对Innodb加锁的分析

    背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文,准备 ...

  7. Android Support Palette使用详解

    使用Palette API选择颜色 良好的视觉设计是app成功所必不可少的, 而色彩设计体系是设计的基础构成. Palette包是支持包, 能够从图片中解析出突出的颜色, 从而帮助你创建出视觉迷人的应 ...

  8. 【APIO 2018】铁人两项(圆方树)

    题目链接 题意大概是,求有多少三元组$(s,c,f)(s \neq c, c \neq f, s \neq f)$,满足从$s$到$f$有一条简单路径经过$c$. 得到结论: 点双中任意互不相同的三个 ...

  9. 【bzoj3209】 花神的数论题

    http://www.lydsy.com/JudgeOnline/problem.php?id=3209 (题目链接) 题意 ${sum(i)}$表示${i}$的二进制表示中${1}$的个数.求${\ ...

  10. 构建工具----gradle---可能遇到的问题----Could not reserve enough space for object heap

    Could not reserve enough space for object heap 意思是 jvm的设置内存不足以运行gradle命令了. 分为两种情况,解决的方法也不同. .10/user ...