私はEF6 ORMを使用するアプリケーションを持っています。2つのスレッドと2つのDataContextsが2回挿入されます
新しいオブジェクトを作成するメソッドがあります。私はまた、アプリケーションのロギングを担当するスレッドを持っています。 LogObjectをエンキューし、5秒ごとにデータベースに保存します。
ユーザーが新しいオブジェクトを作成するメソッドを呼び出します。
using(DataContext context = new DataContext() {
context.MyObjects.Add(new MyObject() { prop1 = "test" });
context.SaveChanges(); // save #1
Log("A new MyObject was created!"); // this method enqueues log info
}
方法を保存ロガーデータベースは以下の通りです:
private void Flush() {
using (DataContext db = new DataContext() {
foreach(Log l in _logs) {
db.Logs.Add(new LogObject() { propX = "blabla" });
}
db.SaveChanges(); // save #2
}
}
正しく#1挿入オブジェクトを保存します。 問題は、save#2も同じMyObject()を挿入することです。
私はデータベースをプロファイリングし、プロセスをデバッグしました。
[mcve]が便利です。これは、 'save#2'に 'save#1'で保存したオブジェクトが関わっている場合に発生する可能性があります。これはあなたの質問では当てはまらないようですが、おそらく実際のコードではありません。 –
'LogObject'にはナビゲーションプロパティがありますか(おそらく' MyObject'に)? –
@BradleyUffnerそれが問題でした。ログにMyObjectのナビゲーションプロパティがありました...ありがとうございました! – Baral