在使用InsertOnSubmit()
之前,有没有办法在使用SubmitChanges()
函数插入行时检查数据库的约束?
原因,我正在循环从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){}
}
答案 0 :(得分:0)
尝试这个怎么样:
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
集合中。然后,您可以继续迭代剩余的配置文件,并在完成导入,记录或报告错误的配置文件后,以便您可以更正它们并尝试重新导入。