ef 下的并发处理

在ef给我们带来快速开发体验的同时,还给我们带来了数据并发处理的方便:

首先见识一下,没有对数据进行并发处理的时候的数据情况:

edmx文件中的实体如下图所示:

数据库结构如下图:

代码如下:

View Code
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading;
 6 using System.IO;
 7 
 8 namespace ConsoleApplication1
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             TTTT tTTT = new TTTT();
15             tTTT.Start();
16         }
17 
18     }
19 
20 
21     public class TTTT
22     {
23 
24         public void Start()
25         {
26             //申请两个线程
27             ThreadStart ts = new ThreadStart(Update);
28             ThreadStart ts1 = new ThreadStart(Update);
29             Thread t = new Thread(ts);
30             Thread t1 = new Thread(ts);
31             t.Start();
32             t1.Start();
33         }
34 
35         public void Update()
36         {
37             Model1Container db = new Model1Container();
38             var test = db.Test.FirstOrDefault();
39             for (int i = 0; i < 30; i++)
40             {
41                 try
42                 {
43                     //此处用文件达到的效果是延迟时间
44                     string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "1.mp3");
45                     using (FileStream fs = new FileStream(path, FileMode.Open))
46                     {
47                         byte[] bs = new byte[fs.Length];
48                         test.im = bs;
49                     }
50 
51                     test.Property = i;
52                     db.SaveChanges();
53 
54                     db.Refresh(System.Data.Objects.RefreshMode.StoreWins,test);//获取数据库中的新的数据
55                     var testNow = db.Test.FirstOrDefault();
56 
57                     Console.WriteLine(string.Format("===={0}===={1}", i, testNow.Property));
58                 }
59                 catch (Exception ex)
60                 {
61                     Console.WriteLine(string.Format("===={0}====", ex.Message));
62                 }
63             }
64         }
65 
66     }
67 }

运行后的结果:

红色标注的就是脏数据,上边还有很多。

 

设置并发模式,即将属性的“并发模式”,选择为fixed,如下图所示:

运行代码,得出比较友好的异常,结果如下:

注意:

有人会有如下的写法:

1    if (test.EntityState != System.Data.EntityState.Unchanged)
2                     {
3                         //代码
4                     }
5                     else
6                     {
7                         //提示
8                     }

这种写法部门解决问题的。并不一定能够弹出提示。

转载于:https://www.cnblogs.com/zuolijun/archive/2013/02/01/2889262.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值