2015-11-21 3 views
2

EDIT 3Устранение SqlException

Чтобы было ясно, на данный момент:

1) Я вижу исключения SQL в выводе, но это не «Ловля» никаких исключений ... выполнения кода как правило, и единственная причина, по которой я знаю, есть исключения, что я смотрю окно вывода. Кажется, что объект работает для первоначального чтения (он возвратил ожидаемые данные).

2) Сущность зависает, когда я пытаюсь использовать .SaveChanges, но я не могу «поймать» любые исключения ... он просто зависает. Не знаю, почему?

Оригинал Сообщение У меня есть C# консольное приложение, с использованием .NET 4.5 с помощью Entity Framework 6.1.3

Я могу прочитать мою базу данных, так что я знаю строку соединения и учетные данные являются правильными. Моя проблема заключается в том, что, когда я делаю DbContext.SaveChanges() мои зависания приложения, и если я повесить курсор над методом SaveChanges в Visual Studio, всплывающий показывает, что он бросил:

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; 
} 

EDIT 1

Исключения подтверждают, что они не реальны. Это всплывающее окно, предоставляемое инструментами ReSharper или MS Productivity, чтобы показать мне возможные исключения ... Думаю.

Так что я остался с тобой на .SaveChanges, не имея возможности узнать почему?

EDIT 2

Я вижу, что в первом чтении базы данных, вывод окна отладки показывает исключения, даже если читать работал! Обратите внимание, что это также находится внутри блока try/catch (Catch (Exception e)), и исключения НЕ попадают!

Первый шанс, исключение типа «System.Data.SqlClient.SqlException» произошло в System.Data.dll
Первый шанс, исключение типа «System.Data.Entity.Core.EntityCommandExecutionException»произошел в EntityFramework.dll
Первого шанса исключение типа„System.Data.Entity.Core.EntityCommandExecutionException“произошло в EntityFramework.SqlServer.dll

+0

Проверьте сообщение InnerException и отредактируйте его, чтобы добавить его. – CodeNotFound

+0

Как? Я даже не могу поймать внешнее исключение. Я просто знаю, что есть исключения, наведя указатель мыши на SaveChanges, но приложение зависает. –

+0

Затем нажмите «Просмотреть детали», когда вы наведите указатель мыши – CodeNotFound

ответ

0

Ты проблема заключается в e.ToString(). Вы хотите проверить свойство e.Message. Вы также можете проверить, есть ли также e.InnerException.

catch (Exception e) 
{ 
    if (e.InnerException != null) { 
     Console.WriteLine(e.InnerException); 
    } else { 
     Console.WriteLine(e.Message); 
    } 

    Console.ReadLine(); 
    return 0; 

} 
+0

Я ценю попытку ... но, как я уже сказал, я даже не добираюсь до Пойма. –