SqlException

时间:2015-11-21 17:10:33

标签: c# entity-framework entity-framework-6 sqlexception

编辑3

要明确,此时:

1)我在输出中看到SQL Exceptions但它不是" Catching"任何异常......代码正常执行,我知道有例外的唯一原因是我正在查看输出窗口。实体似乎适用于初始读取(它返回预期数据)。

2)当我尝试这样的.SaveChanges时实体挂起,但我似乎无法" Catch"任何例外......它只是挂起。不明白为什么?

原帖 我有一个C#控制台应用程序,使用.Net 4.5使用Entity Framework 6.1.3

我能够读取我的数据库,所以我知道连接字符串和凭据是正确的。我的问题是,当我执行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之前,我 能够从另一个表读取,因此我知道我的凭据和连接字符串工作,我有连接和实体似乎在至少工作。

还有一条信息:几天前这个曾经工作过......我只是不知道自己能做些什么来打破它#34;!在另一台服务器上使用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))块中,并且异常不会被捕获!

  

类型&#39; System.Data.SqlClient.SqlException&#39;的第一次机会异常。发生在System.Data.dll中   类型&#39; System.Data.Entity.Core.EntityCommandExecutionException&#39;的第一次机会异常。发生在EntityFramework.dll中   类型&#39; System.Data.Entity.Core.EntityCommandExecutionException&#39;的第一次机会异常。发生在EntityFramework.SqlServer.dll

1 个答案:

答案 0 :(得分:0)

你的问题出在e.Message。您想要查看catch (Exception e) { if (e.InnerException != null) { Console.WriteLine(e.InnerException); } else { Console.WriteLine(e.Message); } Console.ReadLine(); return 0; } 属性。您还可以检查是否存在e.InnerException。

module.exports = React.createClass({
    render: function(){
        var taskNodes = this.props.todoTasks.map(function(todo){
            return (
                <div>
                    {todo.task}
                    <button type="submit" onClick={this.props.removeTaskFunction(todo)}>Submit</button>
                </div>
            );
        }, this);
        return (
            <div className="todo-task-list">
                {taskNodes}
            </div>
        );
    }
});