创建记录遵循一个简单的流程:检查数据库中是否没有类似的记录,如果没有,则创建一个记录。 seriesInstUid不是主键。主键由SQL服务器创建,因为它在服务器上设置了标识属性。
如下面的代码:
DataClassAsclepiusImagingDataContext db = new DataClassAsclepiusImagingDataContext();
var matchingSeries = from s in db.Series
where s.DDSeriesInstanceUID == dd.seriesInsUid
select s;
if ((matchingSeries == null) || (matchingSeries.Count() < 1))
{
Series ser = new Series();
db.GetTable<Series>().InsertOnSubmit(ser);
db.SubmitChanges();
}
当一些concurent线程试图快速连续执行相同的代码时,问题发生了,记录可能由另一个调用者在“if record exists?”之间创建。和“如果不创造新的记录”。在这种情况下,第一个调用者将创建一个副本。
确保在此方案中不创建重复项的有效方法是什么?
答案 0 :(得分:1)
以下是几种方法。 1)您可以在数据库上添加唯一约束,以确保不会创建重复项。 2)将数据插入代码封装在锁定块中,以确保一次只能有一个线程执行插入。