2013-05-02 26 views
6

Varlık çerçevesi, bana neden tam öznitelik ve hataya neden olan öznitelik belirtmeden genel iletileri verir. Hata hakkında daha fazla bilgi nasıl alabilirim?varlık çerçevesi içinde bir istisna neden olan tam varlığı bulmak

bu işlem başarısız oldu böyle

olarak birçok durumda olur: Bir veya yabancı anahtar özelliklerinin daha olmayan null olduğu için ilişki değiştirilemedi. Bir ilişkide bir değişiklik yapıldığında, ilgili yabancı anahtar özelliği, boş bir değere ayarlanır. Yabancı anahtar null değerlerini desteklemiyorsa, yeni bir ilişki tanımlanmalı, yabancı anahtar özelliğine sıfırdan başka bir değer verilmemeli veya ilgisiz nesnenin silinmesi gerekir.

ve

datetime veri türü için bir datetime2 veri türü dönüşüm dışı bir aralık değeri ile sonuçlandı. Açıklama feshedildi.

durum bilgilerini:

[SqlException (0x80131904): datetime veri türü için bir datetime2 veri türü dönüşüm dışı bir aralık değeri ile sonuçlandı. deyim sonlandırıldı.] System.Data.SqlClient.SqlConnection.OnError (SqlException istisna, Boole breakConnection) 404 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 412 System.Data.SqlClient.TdsParser. Çalıştır (runBehavior runBehavior SqlCommand cmdHandler, SqlDataReader DataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 2660 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 59 System.Data.SqlClient.SqlDataReader.get_MetaData() 118 Sistemi. Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6431425 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior Boolean returnStream, Boolean zaman uyumsuz) +6432994 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boole returnStream String yöntem DbAsyncResult sonuç) 538 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior , RunBehavior runBehavior, Boolean returnStream, String yöntemi) +28 System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior davranışı, String yöntemi) +256 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior davranış) +19 Sistem. Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute (UpdateTranslator çeviricisi, EntityConnection bağlantısı, Sözlük 2 identifierValues, List 1 oluşturulurValue) +270 System.Data.Mapping.Update.Internal.UpdateTranslator.Update (IEntityStateManag er stateManager, IEntityAdapter bağdaştırıcısı) + 391

[UpdateException: Girişler güncellenirken bir hata oluştu. Ayrıntılar için iç özel duruma bakın.] System.Data.Mapping.Update.Internal.UpdateTranslator.Update (IEntityStateManager stateManager, IEntityAdapter bağdaştırıcısı) +11223976 System.Data.Objects.ObjectContext.SaveChanges (SaveOptions seçenekleri) +833 Sistem. Data.Entity.Internal.InternalContext.SaveChanges() +218

[DbUpdateException: Girişler güncellenirken bir hata oluştu. Ayrıntılar için iç istisna bakınız.] System.Data.Entity.Internal.InternalContext.SaveChanges() İşte

+0

Kaç basamak bir 'Datetime2' kullanıyorsunuz? [Bu] bir okuma var mı (http://stackoverflow.com/a/1334193/1466627). –

cevap

7

+291 benim çözümde var kod:

try 
{ 
    _context.SaveChanges(); 
} 
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx) 
{ 
    Exception raise = dbEx; 
    foreach (var validationErrors in dbEx.EntityValidationErrors) 
    { 
     foreach (var validationError in validationErrors.ValidationErrors) 
     { 
      string message = string.Format("{0}:{1}", validationErrors.Entry.Entity.ToString(), validationError.ErrorMessage); 
      //raise a new exception inserting the current one as the InnerException 
      raise = new InvalidOperationException(message , raise); 
     } 
    } 
    throw raise; 
} 

Sen çözelti içine eklemek için bir temel olarak kullanabilirsiniz ... Bu iç içe geçmiş kurar Varlık Çerçevesi'nin tüm ayrıntıları ile istisnalar kümesi.

+0

Bunun ilk hata için iyi olduğunu düşünüyorum, ancak ikinci hata için bir "DbEntityValidationException" alıyorum: Bu [DbUpdateException: girdileri güncelleştirilirken bir hata oluştu. Ayrıntılar için iç istisna bakın.] ' – chadisbad

+0

@chadisbad İç istisna ne diyor? – qujck

+0

İç istisna, 'datetime2 veri türünün bir datetime veri türüne dönüştürülmesi, aralık dışı bir değerle sonuçlandı. Açıklama sonlandırıldı. 'İstisna neden olan belirli birliği ve özniteliği (sütun) bulabilir miyim bilmek istiyorum. – chadisbad

1
Eğer testler için depolar için ve temel sınıf testleri yazmak gerekiyor

:

try 
{ 
    DbContext.SaveChanges(); 
} 
catch (DbEntityValidationException e) 
{ 
    e.EntityValidationErrors.SelectMany(error => error.ValidationErrors).ToList().ForEach(
    item => Console.WriteLine("{0} - {1}", item.PropertyName, item.ErrorMessage)); 
    throw; 
} 
+0

Yukarıdaki çözüm MySql veritabanı için çalışmıyor. MySql bağlayıcısı MySql.Data.MySqlClient.MySqlException türünde özel durumu atar. Herhangi bir Fikir bu durumda ne yapılabilir? –