编辑3
为了明确,目前情况如下:
1)我在输出中看到了SQL异常,但它没有“捕获”任何异常……代码正常执行,我知道有异常的唯一原因是我正在查看输出窗口。实体似乎在初始读取时有效(返回了预期数据)。
2)当我尝试执行 .SaveChanges
时,实体会挂起,但我似乎无法“捕获”任何异常……它只是挂起。不知道为什么?
原帖
我有一个使用Entity Framework 6.1.3、.Net 4.5的C#控制台应用程序。
我能够读取我的数据库,所以我知道连接字符串和凭据是正确的。我的问题是,当我执行DbContext.SaveChanges()
时,我的应用程序会挂起,如果我将鼠标悬停在Visual Studio中的SaveChanges
方法上,弹出窗口会显示它已经抛出了:
System.Data.Entity.InfrastructureDbUpdateException
System.Data.Entity.InfrastructureConcurrencyException
System.Data.Entity.Validation.DbEntityValidationException
System.NoSupportedException
System.ObjectDisposedException
System.InvalidOperationException
我试图按照下面的代码捕捉这些异常,但在阅读其他SO文章时,似乎我无法捕捉到这些异常?有人知道如何捕获这些异常吗?
请注意,在执行这些 SaveChanges
之前,我已经能够从另一个表中读取数据,因此我知道我的凭据和连接字符串有效,并且我已经建立了连接。
还有一个信息:这在几天前仍然有效... 我不知道我可能做了什么来“破坏”它!在另一台服务器上使用SQL Server。
连接字符串是:
<add name="DataContext"
connectionString="data source=1.2.3.4;initial catalog=db1;user id=user1;password=pwd1;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
总之,我的应用程序在执行.SaveChanges
时卡住了,我不知道为什么……
try
{
return _context.SaveChanges();
}
catch (DbUpdateException e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
return 0;
}
catch (DbEntityValidationException dbEx) // added for debug.
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage);
Console.WriteLine(string.Format("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage));
Console.ReadLine();
}
}
return 0;
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
return 0;
}
编辑1
异常并不是真实存在的。它们是由ReSharper或MS Productivity工具提供的弹出窗口,用来显示可能的异常...我猜。
所以我只剩下在 .SaveChanges
处停顿而无法知道为什么的情况了?
编辑2
我发现在第一次读取数据库时,即使读取成功,调试输出窗口也会显示异常!请注意,这也在 try/catch (Catch (Exception e)
) 块内,并且异常未被捕获!
在 System.Data.dll 中发生了“System.Data.SqlClient.SqlException”的一次机会异常
在 EntityFramework.dll 中发生了“System.Data.Entity.Core.EntityCommandExecutionException”的一次机会异常
在 EntityFramework.SqlServer.dll 中发生了“System.Data.Entity.Core.EntityCommandExecutionException”的一次机会异常