我添加帖子到我的數據庫時有問題,這個「添加」功能從多個線程中調用。通常在彼此之後很快,我不知道這是否重要,但它是如何工作的。InvalidOperationException當保存到數據庫
代碼:
private object dbLock = new object();
public void Add(string fileName, DateTime collectionTime)
{
try
{
lock (dbLock)
{
var collection = new Collection
{
Filename = fileName,
Datetime = collectionTime,
};
_entities.AddToCollection(collection);
_entities.SaveChanges();
CollectionChanged(collection, null);
}
}
catch (Exception ex)
{
}
finally
{
}
}
我的問題是,當調用SaveChanges我得到這個異常:更新對象
到數據庫的更改被成功提交,但出現 錯誤上下文。 ObjectContext的狀態可能不一致。內部異常 消息:由於對象的鍵 值與ObjectStateManager中的另一個對象衝突,因此AcceptChanges無法繼續。使用 確保在調用AcceptChanges之前鍵值是唯一的。
我設法找到所有的答案有事情做與你必須添加StoreGeneratedPattern="Identity"
,我媒體鏈接這樣做,但它並不能幫助
<Property Name="ID" Type="integer" Nullable="false" StoreGeneratedPattern="Identity" />
那麼,有沒有其他的方式來解決這個?
「不一致」總是表示進程尚未完全終止ist工作。如果您正在使用多個線程訪問您的數據庫,則DBMS必須能夠處理此問題,或者您的代碼必須是線程安全的 –
使用來自多個線程的對象上下文通常意味着*非常糟糕*正在發生 - 即* *不是**的預期用法,並可能導致非常糟糕的事情。吞下異常也是一個非常糟糕的主意。你可以擴展這裏的場景嗎?這是什麼樣的應用程序,爲什麼它在線程之間共享對象上下文? –