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 потоков для сохранения данных одновременно. Хотя это неправильно, потому что я хочу только сохранить данные. Перехват используется для создания запроса на обновление в случае сбоя вставки (Add), поскольку запись уже существует.
Что произойдет, если я сниму замок. Как будет работать SaveChanges
? Как должен выглядеть мой код? Спасибо