.NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理
作者:webabcd
介绍
以Northwind为示例数据库,DLINQ(LINQ to SQL)之事务处理和并发处理
示例
TransactionAndConcurrency.aspx
Inherits="LINQ_DLINQ_TransactionAndConcurrency" Title="事务处理和并发处理" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
事务处理和并发处理详见:TransactionAndConcurrency.aspx.cs
</asp:Content>
using System.Data;
using System.Configuration;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using DAL;
using System.Transactions;
public partial class LINQ_DLINQ_TransactionAndConcurrency : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 事务处理(DataContext.SubmitChanges()会做默认的事务处理)
TransactionDemo1();
// 事务处理(用DataContext.Connection.BeginTransaction()的方式做事务处理)
TransactionDemo2();
// 事务处理
TransactionDemo3();
// 并发处理
Concurrency();
}
/// <summary>
/// 事务处理(DataContext.SubmitChanges()会做默认的事务处理)
/// </summary>
private void TransactionDemo1()
{
try
{
NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Categories.InsertOnSubmit(new Categories { CategoryName = "test", Description = "test" });
ctx.Categories.InsertOnSubmit(new Categories { CategoryID = 1 });
ctx.SubmitChanges();
}
catch
{ }
}
/// <summary>
/// 事务处理(用DataContext.Connection.BeginTransaction()的方式做事务处理)
/// </summary>
private void TransactionDemo2()
{
int? categoryId = null;
NorthwindDataContext ctx = new NorthwindDataContext();
if (ctx.Connection.State != ConnectionState.Open)
{
ctx.Connection.Open();
}
System.Data.Common.DbTransaction tran = ctx.Connection.BeginTransaction();
ctx.Transaction = tran;
try
{
ctx.AddCategory("test", "test", ref categoryId);
ctx.DeleteCategory(1);
tran.Commit();
}
catch
{
tran.Rollback();
}
}
/// <summary>
/// 事务处理(用System.Transactions.TransactionScope做事务处理)
/// </summary>
private void TransactionDemo3()
{
int? categoryId = null;
using (TransactionScope tc = new TransactionScope())
{
try
{
NorthwindDataContext ctx = new NorthwindDataContext();
ctx.AddCategory("test", "test", ref categoryId);
ctx.DeleteCategory(1);
tc.Complete();
}
catch
{ }
}
}
/// <summary>
/// 并发处理
/// </summary>
private void Concurrency()
{
// 修改字段的UpdateCheck为Never,可在对象关系设计器(Object Relational Designer)中修改
// [Column(Storage="_UnitPrice", DbType="Money")]
// [Column(Storage="_UnitPrice", DbType="Money", UpdateCheck=UpdateCheck.Never)]
NorthwindDataContext ctx = new NorthwindDataContext();
var products = ctx.Products;
foreach (var p in products)
{
p.UnitPrice ++;
}
try
{
// 表示即使发生冲突也要继续
ctx.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);
}
catch (System.Data.Linq.ChangeConflictException e)
{
foreach (System.Data.Linq.ObjectChangeConflict occ in ctx.ChangeConflicts)
{
Products p = (Products)occ.Object;
// 以当前客户端中的值为准
occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
// 以当前数据库中的值为准
occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);
// 如果数据库中的值没有发生变化,则以当前客户端中的值为准。否则,则以当前数据库中的值为准
occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges);
foreach (System.Data.Linq.MemberChangeConflict mcc in occ.MemberConflicts)
{
// 当前客户端中的值
string currentValue = mcc.CurrentValue.ToString();
// 原来数据库中的值
string originalValue = mcc.OriginalValue.ToString();
// 当前数据库中的值
string databaseValue = mcc.DatabaseValue.ToString();
// 以当前客户端中的值为准
mcc.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
// 以当前数据库中的值为准
mcc.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);
// 如果数据库中的值没有发生变化,则以当前客户端中的值为准。否则,则以当前数据库中的值为准
mcc.Resolve(System.Data.Linq.RefreshMode.KeepChanges);
}
}
}
// 表示只要发生冲突就不再继续
ctx.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
// ctx.SubmitChanges();
}
}
OK
[源码下载]
本文出自 “webabcd” 博客,请务必保留此出处http://webabcd.blog.51cto.com/1787395/345015
.NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理相关推荐
- .NET 3.5 - DLINQ(LINQ to SQL)之面向对象的添加、查询、更新和删除
步步为营VS 2008 + .NET 3.5(8) - DLINQ(LINQ to SQL)之面向对象的添加.查询.更新和删除 作者:webabcd 介绍 以Northwind为示例数据库,DLINQ ...
- .NET 3.5(11) - DLINQ(LINQ to SQL)之大数据量分页、延迟执行和日志记录
步步为营VS 2008 + .NET 3.5(11) - DLINQ(LINQ to SQL)之大数据量分页.延迟执行和日志记录 作者:webabcd 介绍 以Northwind为示例数据库,DLIN ...
- 一步一步学Linq to sql(一):预备知识
从今天起将推出新手讲堂,首先从linq开始详细讲解.一步一步学Linq to sql(一):预备知识 什么是Linq to sql Linq to sql(或者叫DLINQ)是LINQ(.NET语言集 ...
- LINQ To SQL 语法及实例大全
LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...
- ADO.net,Linq to SQL和Entity Framework性能实测分析
[测试总结] 第一阶段测试结果非常出人意料,ADO.net和LINQ to SQL操作数据的时间都控制在0.5秒以内,非常的迅速,但是Entity Framework在添加这步表现非常差,由于这五步是 ...
- Linq to sql与EF零碎知识点总结
------------------------------第一天(2013-3-25) 1.ado.net实体模型,(Ef) 2.创建上下文对象: 调用相应方法,最后调用.savechanges() ...
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
,我们做了基于linq to sql 的多条件组合查询,但通过监视数据库发现,这样做的成本比较高,每次都要取出全部的数据到内存进行筛选.如何从真正意义上做到延迟加载,即一次只从数据库中取我们需要的用到 ...
- 使用LINQ解除SQL注入安全问题
在开发人员承受越来越多的安全责任之时,许多开发人员了解到的第一个Web应用安全漏洞,是一个被称为"SQL注入"的极危险的命令注入形式.命令注入的原始的形式本是指这样一种漏洞:攻击者 ...
- 艾伟_转载:使用LINQ to SQL更新数据库(上):问题重重
在学习LINQ时,我几乎被一个困难所击倒,这就是你从标题中看到的更新数据库的操作.下面我就一步步带你走入这泥潭,请准备好砖头和口水,Follow me. 从最简单的情况入手 我们以Northwind数 ...
最新文章
- Oracle --存储过程,输入不定个数参数
- 牛客题霸 NC8 二叉树根节点到叶子节点和为指定值的路径
- Keras实现LeNet-5网络,与可视化网络
- 18 PP配置-生产计划-检查 MRP 元素的文本
- linux-基本开发环境搭建
- 双11拼团最后的福利!老用户如何解散团并加入新团!
- python程序设计pdf机械出版_Python程序设计
- FPGA入门程序(1)——流水灯
- 基于javaweb的校园自行车租赁管理系统(java+jsp+javascript+servlet+mysql)
- Excel直接跳过隐藏行,粘贴数据到可见单元格
- 连接SQLserver数据库发生错误,提示用户sa登录失败解决方法(亲试有用)
- c语言函数大全 chm,c语言常用函数手册 chm格式.doc
- OutOfMemoryError(OOM)和StackOverflowError(SOF)异常总结
- 【操作系统】30天自制操作系统--(1)虚拟机加载最小操作系统
- 系统问题调试:appcrash
- 认识植物 - 水杉 (比较常见的濒危植物)
- JS鼠标放上移开 显示隐藏图标 的代码思路
- Win10+VS2017的C++属性配置表
- ArchSummit深圳2016优秀演讲公布,北京站专题抢先看
- 購物籃分析,最清楚概念-part1
热门文章
- 用visio画用例图小人_教你如何用 Python 打飞机 ?
- numpy 读写 npy npz 文件
- python 获取程序运行时间
- 模型加速--CLIP-Q: Deep Network Compression Learning by In-Parallel Pruning-Quantization
- 重温目标检测--YOLO v1
- 人脸检测--SSH: Single Stage Headless Face Detector
- ASP .NET Core使用connection string连接MySQL/MariaDB,并设置UTF-8编码
- pycharm中R工具包的安装
- 什么是Hystrix
- SpringBoot获取请求的参数