zoukankan      html  css  js  c++  java
  • 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                     }

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

  • 相关阅读:
    bug管理工具之禅道的测试模块的使用
    bug优先级别
    Python ——报错集锦
    Python 中if __name__ == '__main__': 的作用和原理
    selenium驱动程序下载和使用流程
    Python介绍及环境搭建
    自动化测试基础篇--Selenium发送测试报告邮件
    自动化测试基础篇--Selenium cookie操作
    自动化测试基础篇--Selenium等待时间
    批量建库脚本
  • 原文地址:https://www.cnblogs.com/zuolijun/p/2889262.html
Copyright © 2011-2022 走看看