InsertOnSubmit constraints

本文关键字:constraints InsertOnSubmit | 更新日期: 2023-09-27 18:16:17

是否有一种方法可以在使用SubmitChanges()之前使用InsertOnSubmit()函数插入一行时检查数据库的约束?

原因,我正在循环从csv文件生成的数据表。我每次插入一行来显示进度。现在,当发生冲突时,linq回滚所有更改,而我希望成功的插入保持插入。

现在,当运行这段代码时,它在第一个冲突时给出一个错误,并在那里停止。它不会再插入任何行,并且在下次运行此代码时覆盖冲突之前的行。

我希望有人能帮我解决这个问题。您可以在下面找到我的代码片段。

问候,Thijs

foreach (DataRow row in Data.Rows)
{
  ProfilePrefillData profile = new ProfilePrefillData();
  //Paramaters
  profile.ProfileId = new Guid(row["profileid"].ToString());
  ...
  //Insert & submit
  db.ProfilePrefillDatas.InsertOnSubmit(profile);
  try
  {
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
  }
  catch (Exception ex){}
}

InsertOnSubmit constraints

试试这个:

List<ProfilePrefillData> badProfiles = new List<ProfilePrefillData>();
foreach (DataRow row in Data.Rows)
{ 
  ..
  try 
  {
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
  }
  catch (Exception ex)
  {
    // record which are the bad profiles
    badProfiles.Add(profile);
    // Remove the bad profile from items to be added
    db.ProfilePrefillDatas.Remove(profile);
  }
}
// Return some information to the user about the bad profiles so that
// they can be identified, corrected and reimported.
LogBadProfileData(badProfiles);

因此,当一个配置文件导致错误时,您将其从DataContext的集合中删除(以便它不会试图在下一次迭代中重新插入它们)并将它们存储在badProfiles集合中。然后,您可以继续遍历剩余的概要文件,在它们完成导入之后,记录或报告错误的概要文件,以便您可以纠正它们并尝试重新导入。