抛出异常的代码非常简单 - 这是非常常规的插入然后提交更改语句,它看起来:
context.tb_dayErrorLog.InsertOnSubmit(data);
context.SubmitChanges();
所以真的没什么特别的。该语句每天执行大约 5 万次,没有任何问题,但是:每天大约执行 6 到 10 次,结果如下:
在调用 SubmitChanges 期间无法执行该操作。
StackTrace: at System.Data.Linq.DataContext.CheckNotInSubmitChanges()
at System.Data.Linq.Table`1.InsertOnSubmit(TEntity entity)
我试图找出那可能是什么,但找不到线索这种行为非常不确定,礼貌地说 - 它如何正确完成 50k 次而几次不正确?
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 做同样的事情,但这个问题并没有发生......
所以我的好奇心让我思考为什么?