zoukankan      html  css  js  c++  java
  • Entity Framework 4.0并发处理的步骤

    新用到了实体框架,用到了并发,参考以下的图书资料

    Entity Framework 4.0 Recipes A Problem-Solution Approach

    ISBN-13 (pbk): 978-1-4302-2703-8

    ISBN-13 (electronic): 978-1-4302-2704-5

    http://apress.com/book/view/1430227036

    具体的步骤如下:

    建立模型

    添加Ado.net Entity Model后类似如下添加TimeStamp并发控制的时间戳

    clip_image002

    注意:

    并发控制不一定非要加时间戳,如果不加时间戳,那需要把那个每次更新的字段的并发模式设置为Fixed. 一般的使用加时间戳比较方便

    生成数据库

    这个是VS2010新加的功能,vs2008 sp1没有这个功能,很好用,可以实现从模型进行开始设计

    clip_image004

    如上,模型上右键,可以生成数据库脚本,不过这个生成的脚本对于TimeStamp字段的处理有些问题,默认模型生成的字段不是timestamp数据库类型[应该可以在SSDLToSQL10.tt文件中修改,没有试验],可以采用以下方法处理,新加一个sql文件,类似如下:

    alter table DemoSet drop COLUMN [TimeStamp]
    
    alter table DemoSet add [TimeStamp] timestamp not null

    以后从模型更新数据库时只要先运行生成的sql脚本,再运行一下这个脚本就行了

    并发处理

    using (TestContainer context = new TestContainer())
    
    {
    
    //新加一个记录
    
    Demo d = new Demo() { Name = "a", Phone = "123" };
    
    context.DemoSet.AddObject(d);
    
    context.SaveChanges();
    
    //使用SQL执行一个更新模拟并发的情况
    
    d = context.DemoSet.First();
    
    context.ExecuteStoreCommand(@"update DemoSet set Phone='456' where Id = @p0", new object[] { d.Id });
    
    ///出现并发冲突的处理
    
    try
    
    {
    
    d.Phone = "321";
    
    ///也可以强制采用最后一次的更新为准的方式,如下屏蔽的两行
    
    ///context.DemoSet.MergeOption = MergeOption.PreserveChanges;
    
    ///d = context.DemoSet.First(p => p.Id == d.Id);
    
    context.SaveChanges();
    
    Console.WriteLine("No concurrency exception.");
    
    }
    
    catch (OptimisticConcurrencyException)
    
    {
    
    try
    
    {
    
    context.Refresh(RefreshMode.ClientWins, d);
    
    context.SaveChanges();
    
    }
    
    catch (OptimisticConcurrencyException)
    
    {
    
    //在大量用户时,处理的瞬间,别人又更新了,此时可以继续处理
    
    }
    
    }
    
    //清理数据库
    
    d = context.DemoSet.First();
    
    context.DeleteObject(d);
    
    context.SaveChanges();
    
    }
  • 相关阅读:
    BERT基础知识
    TorchText使用教程
    Pytorch-中文文本分类
    预处理算法_5_数据集划分
    预处理算法_4_表堆叠
    预处理算法_3_新增序列
    预处理算法_2_类型转换
    预处理算法_1_表连接
    爬取网站所有目录文件
    如何将Docker升级到最新版本
  • 原文地址:https://www.cnblogs.com/2018/p/1756611.html
Copyright © 2011-2022 走看看