我之前有一个与此类似的问题,但是关于实体框架。从那时起,我尝试使用Telerik OpenAccess。这是我的模特:
当每10秒运行一次以下函数时,它的行为与预期的一样,并且不会通过异常。但是,如果我在短时间内连续调用此函数,则会收到此错误。
InvalidOperationException - Not allowed because Commit / Rollback is in progress
这是功能。 SaveChanges()
private void NewTaskTaskCompleted(object sender, TaskCompletedEvent e)
{
TASK scheduledTask = entities.TASKs.First(x => x.TASK_NAME == e.ClassName);
scheduledTask.NEXT_RUN = e.NextRun;
//entities.SaveChanges();
TASK_LOG logMsg = new TASK_LOG()
{
TASK = scheduledTask,
MESSAGE = e.TaskResult.Message,
STATUS = e.TaskResult.Status ? "Successful" : "Failure",
TIMESTAMP = e.CompletedTime
};
scheduledTask.TASK_LOGs.Add(logMsg);
//entities.Add(logMsg);
entities.SaveChanges();
}
SaveChanges调用是否阻止函数退出,阻止发生下一个函数调用?
答案 0 :(得分:0)
Telerik标准的乐观并发行为。含义:假设没有并发发生,如果发生,它将崩溃。以前没有检查,所以要么使用自己的机制(如锁)。
另见http://www.telerik.com/help/openaccess-orm/concurrency-control-pessimistic.html