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并发控制的时间戳
注意:
并发控制不一定非要加时间戳,如果不加时间戳,那需要把那个每次更新的字段的并发模式设置为Fixed. 一般的使用加时间戳比较方便
生成数据库
这个是VS2010新加的功能,vs2008 sp1没有这个功能,很好用,可以实现从模型进行开始设计
如上,模型上右键,可以生成数据库脚本,不过这个生成的脚本对于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(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南