static Object LockEx=new Object();
public void SaveMyData(IEnumerable<MyData> list)
{
lock (LockEx)
{
using (PersistencyContext db = new PersistencyContext())
{
foreach (var el in list)
{
try
{
db.MyData.Add(el);
db.SaveChanges();
}
catch (DbUpdateException)
{
db.Entry(el).State = EntityState.Modified;
db.SaveChanges();
}
}
}
}
}
このメソッドは、複数のスレッドから呼び出されます。現在、静的ロックを使用して、2 つのスレッドが同時にデータを保存するのを回避しています。データを保存したいだけなので、これは間違っていますが。エントリが既に存在するために挿入 (追加) が失敗した場合に備えて、catch を使用して更新クエリを作成します。
ロックを解除するとどうなりますか。作品はどうなるSaveChanges
?私のコードはどのように見えるべきですか? ありがとう