Rot*_*tan 5 c# multithreading entity-framework
我正在开发一个与数据库通信的SignalR应用程序.我使用Entity Framework 6管理数据库.
我想实现一个计划任务,他将删除给定表中的一些记录.
问题是这个任务没有在我的应用程序的主线程上运行.因此,如果此任务在主线程尝试读取同一记录时删除记录,则应用程序崩溃.
我这样管理数据库上下文: using (var dbContext = new DatabaseContext())
//code to get and remove record...
dbContext.saveChanges();
哪个是避免并发问题的最佳解决方案?我应该强制计划任务在主线程上运行吗?如果是,我该怎么做?或者我应该使用TransactionScope类使用事务锁?
编辑
场景:每个任务执行之间500毫秒
执行1个第一次调用的任务=> new dbContext instance => get record => delete record => saveChanges ...
与此同时,再次调用任务.
执行2任务第二次调用=> new dbContext instance(因为第一个任务仍然在运行,两个dbContext对象还活着)=> get record => delete record => saveChanges崩溃,因为它已经在第一次完成了同样的事情时间.
例外: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded.
谢谢
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |