使用Entity Framework进行并发访问

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.

谢谢