的代码抛出异常通话过程中进行的操作是非常容易的 - 这是非常有规律的插入,然后提交更改声明,看起来:LinQ在DataContext的 - 不能给的SubmitChanges
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的这个问题不存在的做同样的事情...
所以我的好奇心让我想到,为什么?
我想我们需要一些额外的信息。这段代码是否在计划任务上运行?这个程序的多个实例可能同时运行吗?无论如何,这只是一个猜测,只有两行代码需要分析。 –
“数据”上的任何事件? –
这是非常简单的函数,它只执行一个记录插入,为每个调用初始化DC,因此无论它是否并发? 有趣的是,当我用旧的ADO.Net SqlCommand执行db调用,那么问题不会发生...... 因此,在旧的Ado.Net中打开连接始终为您分配一个新的连接。 context = new DataContext(ConnectionString); 是不是做同样的事情? – Johnny