DB に投稿を追加するときに問題が発生しました。この「追加」関数は複数のスレッドから呼び出されます。そして、通常は非常に迅速に、これが重要かどうかはわかりませんが、それが機能する方法です.
コード:
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" />
これを解決する他の方法はありますか?