の呼び出し中に実行することはできません。きゅうのDataContext - これは非常に定期的に挿入され、その後に見えた変化書を提出 - 操作が例外を投げているコードは非常に簡単ですでSubmitChanges
context.tb_dayErrorLog.InsertOnSubmit(data);
context.SubmitChanges();
をだから、本当に何も特別な。このステートメントは問題なく一日に約50,000回実行されますが、 と終了日約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オブジェクトこの問題occuringされていないことで、同じことをしながら私は、コメントに書いたように?
私はいくつかの追加情報が必要と思います。このコードは、スケジュールされたタスクで実行されていますか?このプログラムの複数のインスタンスが同時に実行される可能性はありますか?とにかく、解析するコードは2行のみで、それはちょっと推測です。 –
あなたの 'data'のイベントはありますか? –
これは、すべての呼び出しに対してDCを初期化するという、単なるレコード挿入を行う非常に単純な関数なので、同時かどうかは関係ありません。 古いADO.Net SqlCommandを使用してdbコールを実行すると問題が発生しないというのは面白いことです... 古いAdo.Netの接続を開くと、常に新しいconnが割り当てられます。 コンテキスト=新しいDataContext(ConnectionString); は同じことをしていませんか? – Johnny