我有一個使用EF6 ORM的應用程序。兩個線程和兩個DataContexts插入兩次
我有一個方法來創建一個新的對象。我也有一個負責應用程序日誌記錄的線程。它入侵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插入對象正確。 問題是保存#2也插入了一個相同的MyObject()...
我剖析了數據庫並調試了這些進程。
A [mcve]會很有用。如果'save#2'涉及保存在'save#1'中的對象,這可能會發生 - 這似乎不是您的問題的情況,但它可能不是真正的代碼。 –
'LogObject'是否有任何導航屬性(可能是'MyObject')? –
@BradleyUffner這是問題所在。日誌有一個導航屬性MyObject ...謝謝! – Baral