LINQ To SQL的Transaction举例分析
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"LINQ To SQL的Transaction举例分析",在日常操作中,相信很多人在LINQ To SQL的Transaction举例分析问题上存在疑惑,小编查阅了各式资料,整理出简
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
新华互联网科技学校
鸠鸠互联网科技
互联网科技金融
科技服务与互联网
互联网科技金融公司
互联网科技革命
朗涯互联网科技
银优互联网科技有限公司
互联网科技素材视频竖屏
江苏南京365互联网科技
华服互联网科技官网
互联网科技有哪些公司
健康食品互联网创新科技园项目
企晟互联网信息科技有限公司
互联网数据科技专业
济南有互联网科技公司吗
广州千川互联网科技有限公司
南京一网一红互联网科技有限公司
互联网科技机房
银川新华互联网科技学校招聘
互联网科技排名
贷财互联网科技
顺玮阁互联网科技
火传媒上海互联网科技
互联网科技有限公司 翻译
科技互联网的估值
互联网金融科技公司干啥的
爱医互联网络科技
广州燕处互联网科技有限公司
互联网科技收购价值