如何使用LINQ's的SubmitChanges方法处理异常
本文关键字:SubmitChanges 方法 处理 异常 何使用 LINQ | 更新日期: 2023-09-27 18:11:44
我正在使用LINQ向我的部门表添加一条新记录,这是我所做的:
try
{
dpt = new departement();
dpt.departementcode = tbDepartementCode.Value;
dpt.departementname = tbDepartementName.Value;
dpt.createby = "hendra";
dpt.createdate = DateTime.Now;
dpt.updateby = "hendra";
dpt.lastupdate = DateTime.Now;
Linq.departements.InsertOnSubmit(dpt);
Linq.SubmitChanges(); // error happen here, and could not catch it.
Response.Redirect("Departement.aspx");
}
catch (ChangeConflictException ex)
{
Console.WriteLine(ex.Message);
}
问题是,即使在使用try
和catch
之后,当我输入数据库中已经存在的记录时,我仍然会得到一个错误屏幕。如何解决这个问题?什么好主意吗?举个例子就好了
如果您尝试在catch块中再次提交更改,它可能会产生一个新的异常。你已经在catch块中,捕获那个新的异常。要捕获新的异常,必须在catch中定义一个新的try-catch。
编辑
既然问题已经改变了,如果catch没有捕捉到在Linq.SubmitChanges()
内部抛出的异常,那么抛出的异常可能不是ChangeConflictException
类型的。
当我输入一个已经存在于数据库中的记录时,我仍然得到一个错误屏幕
首先检查数据库是否存在数据,如果存在则更新旧数据,否则添加新数据。
try
{
// Check Database first with your primary key, lets assume your check returned a
// with dptcheck
var dptcheck = from d in Linq.departments
where d.YourPrimaryKey == YourValue
select d;
dpt = new departement();
if (dptcheck.Any()) dpt = dptcheck.FirstOrDefault();
dpt.departementcode = tbDepartementCode.Value;
dpt.departementname = tbDepartementName.Value;
dpt.createby = "hendra";
dpt.createdate = DateTime.Now;
dpt.updateby = "hendra";
dpt.lastupdate = DateTime.Now;
if (!dptcheck.Any()) Linq.departements.InsertOnSubmit(dpt);
// notice you only insert data if no old value found
Linq.SubmitChanges();
Response.Redirect("Departement.aspx");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
试试下面提到的代码,它可能会对你有所帮助。
Context.SubmitChanges(Result =>
{
if (Result.HasError)
{
CallBack(Result.Error.ToString());
}
else
{
CallBack("Done");
}
}, null);