1

これに似た以前の質問がありましたが、エンティティ フレームワークに関してです。それ以来、Telerik OpenAccess を使用してみました。これが私のモデルです:

ここに画像の説明を入力

次の関数を 10 秒ごとに約 1 回実行すると、期待どおりに動作し、例外は発生しません。ただし、この関数を 3 回連続して呼び出すと、短時間でこのエラーが発生します。

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 呼び出しは関数の終了をブロックせず、次の関数呼び出しが発生しないようにしますか?

4

1 に答える 1

0

Telerik には、Optimistic 同時実行動作が標準で備わっています。意味: 同時実行が発生しないと想定されます。発生した場合、クラッシュします。前にチェックがないので、独自のメカニズム (ロックなど) を使用します。

http://www.telerik.com/help/openaccess-orm/concurrency-control-pessimistic.htmlも参照してください。

于 2012-10-11T12:30:03.270 に答える