LINQ To SQL的Transaction举例分析
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要介绍"LINQ To SQL的Transaction举例分析",在日常操作中,相信很多人在LINQ To SQL的Transaction举例分析问题上存在疑惑,小编查阅了各式资料,整理出简
千家信息网最后更新 2025年01月16日LINQ To SQL的Transaction举例分析
这篇文章主要介绍"LINQ To SQL的Transaction举例分析",在日常操作中,相信很多人在LINQ To SQL的Transaction举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"LINQ To SQL的Transaction举例分析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
不管你是由我的书中,或是MSDN、网站处得知,LINQ to SQL之DataContext于SubmitChanges函式执行时,就算不指定Transaction,DataContext都会自动启动一个 Transaction,在许多ORM中,这算是相当常见的设计。
不过,如果我不想要这个预设的LINQ To SQL Transaction呢?原因有很多,可能是为了减少Lock的时间,或是效能、资源等等,反正就是不想要这个预设行为就是了!只要简简单单的更新资料就好了。
可能吗?就目前的LINQ To SQL设计来说,这个行为是强制性的,且无可调整之空间,但!若要强渡关山也不是没交通工具,DataContext开了一个小口,让我们可以覆载 SubmitChanges函式,以此为起点,我利用了大量的Reflection技巧,让Transaction消失。
using System; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Collections.Generic; using System.Linq; using System.Data.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication35 { class Program { static void Main(string[] args) { NorthwindDataContext context = new NorthwindDataContext(); var item = (from s1 in context.Customers where s1.CustomerID == "VINET" select s1).FirstOrDefault(); if (item != null) item.ContactName = "VINET14"; Console.ReadLine(); context.DisableTransaction = true; context.SubmitChanges(); Console.ReadLine(); } } partial class NorthwindDataContext { public bool DisableTransaction { get; set; } private static MethodInfo _checkDispose = null; private static MethodInfo _checkNotInSubmitChanges = null; private static MethodInfo _verifyTrackingEnabled = null; private static MethodInfo _acceptChanges = null; private static MethodInfo _submitChanges = null; private static FieldInfo _conflicts = null; private static FieldInfo _isInSubmitChanges = null; private static PropertyInfo _services = null; private static Type _changeProcessorType = null; private static ConstructorInfo _ci = null; static NorthwindDataContext() { _checkDispose = typeof(DataContext).GetMethod("CheckDispose", BindingFlags.NonPublic | BindingFlags.Instance); _checkNotInSubmitChanges = typeof(DataContext).GetMethod("CheckNotInSubmitChanges", BindingFlags.NonPublic | BindingFlags.Instance); _verifyTrackingEnabled = typeof(DataContext).GetMethod("VerifyTrackingEnabled", BindingFlags.NonPublic | BindingFlags.Instance); _acceptChanges = typeof(DataContext).GetMethod("AcceptChanges", BindingFlags.NonPublic | BindingFlags.Instance); _conflicts = typeof(DataContext).GetField("conflicts", BindingFlags.NonPublic | BindingFlags.Instance); _isInSubmitChanges = typeof(DataContext).GetField("isInSubmitChanges", BindingFlags.NonPublic | BindingFlags.Instance); _changeProcessorType = typeof(DataContext).Assembly.GetType( "System.Data.Linq.ChangeProcessor"); _services = typeof(DataContext).GetProperty("Services", BindingFlags.NonPublic | BindingFlags.Instance); _ci = _changeProcessorType.GetConstructor( BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(DataContext).Assembly.GetType("System.Data.Linq.CommonDataServices"), typeof(DataContext) }, null); _submitChanges = _changeProcessorType.GetMethod("SubmitChanges", BindingFlags.NonPublic | BindingFlags.Instance); } public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode) { if (DisableTransaction) { _checkDispose.Invoke(this, null); _checkNotInSubmitChanges.Invoke(this, null); _verifyTrackingEnabled.Invoke(this, null); ((ChangeConflictCollection)_conflicts.GetValue(this)).Clear(); try { _isInSubmitChanges.SetValue(this, true); object processor = _ci.Invoke(new object[] { _services.GetValue(this, null), this }); _submitChanges.Invoke(processor, new object[] { failureMode }); _acceptChanges.Invoke(this, null); } finally { _isInSubmitChanges.SetValue(this, false); } } else base.SubmitChanges(failureMode); } } }
处理完毕,我个人是觉得,应该把LINQ To SQL Transaction以Session概念处理,如Hibernate。
到此,关于"LINQ To SQL的Transaction举例分析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
分析
学习
就是
更多
网站
行为
资料
处理
帮助
设计
实用
简简
交通工具
接下来
个人
交通
原因
工具
常见
强制性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国数据库行业规模
统计局举措做好网络安全
工具软件开发师
深圳倍升互联网科技
网络安全防护技术就业
海康服务器加显卡
移动网络安全法律工商部
数据库操作事务
代抢系统服务器位置有限制
湖北系统软件开发服务
eplant数据库
win7网络服务器
软件开发公司开业礼物送什么好
福建win10服务器托管
辽宁软件开发价格标准
信息网络安全的关键技术
橘树互联网科技有限公司
服务器消耗多少流量
网络安全班会布置
农民工网络技术学校
电子科技大学网络技术研究生
郑州软件开发大学科技园
网络安全的审查的方法
ae互联网连线科技城市制作
网络安全有关的小报
小米公交卡当前系统服务器
ping 服务器地址
天津电话软件开发多少钱
大数据网络技术的趋势
思科服务器怎么配置ip地址代码