Код, который генерирует исключение, чрезвычайно прост - это очень регулярная вставка, а затем отправка оператора изменений, который выглядит так:
context.tb_dayErrorLog.InsertOnSubmit(data);
context.SubmitChanges();
Так что на самом деле ничего особенного.Этот оператор выполняется около 50 тысяч раз в день без каких-либо проблем, но: примерно 6-10 раз в день он заканчивается:
Операция не может быть выполнена во время вызова SubmitChanges.
StackTrace: at System.Data.Linq.DataContext.CheckNotInSubmitChanges()
at System.Data.Linq.Table`1.InsertOnSubmit(TEntity entity)
Я пытался выяснить, что это может быть, но не могу найти подсказку. Это поведение очень не детерминировано, вежливо говоря - как оно может закончить 50 000 раз правильно, а несколько раз нет?
DataContext
сначала был инициализирован как статический, а затем повторно использован для всех вызовов, так что я подумал, может быть, в этом проблема.Затем я изменил его для инициализации при каждом вызове, но результаты очень похожи.Еще несколько исключений в день.
Любая идея?
некоторые дополнения: функция выглядит следующим образом:
public override bool Log(ErrorLogData logData)
{
try
{
logData.ProcessID = _processID;
//Create new log dataset
var data = new DataRecord
{
application = logData.Application,
date = DateTime.Now,
Other = logData.Other,
process = logData.ProcessName,
processid = logData.ProcessID,
severity = logData.Severity,
username = logData.UserName,
Type = (short)logData.ErrorType
};
var context = new DataContext(ConnectionString);
context.tb_dayErrorLog.InsertOnSubmit(data);
context.SubmitChanges();
}
catch (Exception ex)
{
//log log in eventviewer
LogEvent(logData.ToString(), ex);
return false;
}
return true;
}
настолько простая инициализация записи и затем вставка.
Как я писал в комментарии, при создании Ado.Net и SqlCommand одной и той же проблемы не возникает ...
Так что мое любопытство заставляет меня задуматься, почему?