gpt4 book ai didi

c# - 从多个线程向DbSet添加元素的方法

转载 作者:行者123 更新时间:2023-12-03 13:21:58 26 4
gpt4 key购买 nike

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将如何工作?我的代码应如何显示?谢谢

最佳答案

我将删除锁,因为数据库无论如何都已经通过设计处理了并发性,然后我还将在尝试添加记录之前验证记录是否存在,然后我将根据此结果进行添加或更新。只是为了避免异常,因为它们是性能的杀手。

关于c# - 从多个线程向DbSet添加元素的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5089211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com