SORU
4 NİSAN 2013, PERŞEMBE


DbEntityValidationException - Nasıl kolayca bu hata neyin sebep olduğunu söyleyebilir miyim?

Varlık Çerçeve kullanan bir projem var. DbContext, SaveChanges Arama sırasında aşağıdaki özel durum alıyorum:

Sistem.Veri.Varlık.Doğrulama.DbEntityValidationException: Doğrulama bir veya daha fazla varlıkları için başarısız oldu. 'EntityValidationErrors' özelliğine bakın daha fazla bilgi için.

Bu tüm ince ve züppe, ama her zaman bu durum oluşur bir hata ayıklayıcı eklemek istemiyorum. Daha fazla, üretim ortamlarında ben büyük çaba bu hataları yeniden gitmem gerek bu kadar kolay olamaz, bir hata ayıklayıcı bağlayın.

Nasıl detayları DbEntityValidationException içinde saklı görebilir miyim?

CEVAP
4 NİSAN 2013, PERŞEMBE


En kolay çözüm varlıkları üzerinde SaveChanges sınıf geçersiz kılmak için. ** 5, kaydırma gerçek hataları yakalamak ve gelişmiş ileti DbEntityValidationException yeni bir oluşturabilirsiniz.

  1. Kısmi bir sınıf SomethingSomething yanında oluşturun.Bağlam.cs dosyası.
  2. Bu yazının altındaki kodu kullanabilirsiniz.
  3. İşte bu kadar. Uygulamanız otomatik olarak yeniden işsiz geçersiz SaveChanges kullanacaktır.

Özel Mesajınızı şimdi bu gibi görünecektir:

Sistem.Veri.Varlık.Doğrulama.DbEntityValidationException: Doğrulama bir veya daha fazla varlıkları için başarısız oldu. 'EntityValidationErrors' özelliğine bakın daha fazla bilgi için. Hata doğrulama: alan PhoneNumber uzunluğu dize veya dizi türü olmalıdır '12'; Soyad alan gereklidir.

DbContext devralan herhangi bir sınıfta geçersiz kılınmış SaveChanges bırakabilirsiniz:

public partial class SomethingSomethingEntities
{
    public override int SaveChanges()
    {
        try
        {
            return base.SaveChanges();
        }
        catch (DbEntityValidationException ex)
        {
            // Retrieve the error messages as a list of strings.
            var errorMessages = ex.EntityValidationErrors
                    .SelectMany(x => x.ValidationErrors)
                    .Select(x => x.ErrorMessage);
    
            // Join the list to a single string.
            var fullErrorMessage = string.Join("; ", errorMessages);
    
            // Combine the original exception message with the new one.
            var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
    
            // Throw a new DbEntityValidationException with the improved exception message.
            throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
        }
    }
}

DbEntityValidationException da doğrulama hatalarına neden varlıkları içerir. Eğer daha fazla bilgiye ihtiyacınız varsa, bu kişiler hakkında çıkış bilgileri için, yukarıdaki kod ile değiştirebilirsiniz.

Ayrıca bakınız: http://devillers.nl/improving-dbentityvalidationexception/

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CaptainDisillusion

    CaptainDisil

    18 EYLÜL 2007
  • Sam Kear

    Sam Kear

    14 Temmuz 2007
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011