Saya memiliki situasi di mana saya menginisialisasi model saya di DatabaseInitializer () untuk EF 4.1 dan mendapatkan kesalahan yang mengganggu ini "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."
Jadi, saya pergi ke EntityValidationErrors ini dan ada bidang {System.Data.Entity.Validation.DbEntityValidationResult}
yang tidak memberi saya informasi sama sekali tentang bidang apa yang tidak dapat diinisialisasi. . Apakah ada cara untuk mendapatkan lebih banyak info tentang kesalahan ini?
Untuk membersihkan:
Saya tahu cara memperbaiki masalah panjang string. Yang saya tanyakan adalah bagaimana cara mendapatkan nama bidang yang tepat yang melanggar model.
ex
dengan$exception
dan mendapatkan hasil yang sama.ex
dengan w / e Andacatch (Exception THIS)
adalahSystem.Linq.Enumerable.ToList(System.Linq.Enumerable.ToList(((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors)[0].ValidationErrors)[0].ErrorMessage
Anda dapat mencoba ini di blok coba / tangkap?
sumber
Solusi terbaik menurut saya, adalah menangani kesalahan semacam ini secara terpusat.
cukup tambahkan metode ini ke
DbContext
kelas utama :Ini akan menimpa
SaveChanges()
metode konteks Anda dan Anda akan mendapatkan daftar yang dipisahkan koma yang berisi semua kesalahan validasi entitas.Semoga ini bermanfaat.
sumber
Yah, saya punya masalah yang sama. Model saya bekerja dengan baik di EF CTP5 tetapi gagal membangun di 4.1 dengan kesalahan yang sama "" Validasi gagal untuk satu atau lebih entitas "ketika saya mencoba untuk memulai. Saya menemukan bahwa saya memiliki properti:
Kemudian dalam metode seed pada initializer yang di-override, saya memiliki komentar yang cukup panjang (sekitar 600 huruf).
Saya pikir intinya adalah: di EF 4.1 Anda harus menetapkan anotasi data secara eksplisit dalam beberapa kasus. Bagi saya, pengaturan:
membantu. Ini aneh karena CTP5 tidak punya masalah dengan itu.
sumber
Saya merasa berguna untuk membuat pembungkus SaveChanges yang membuat EntityValidationErrors lebih mudah dibaca:
dan kemudian mengubah 'entitas. Simpan Perubahan ()' menjadi 'Simpan Perubahan (entitas)' di seluruh proyek saya
sumber
Saya tahu ini pertanyaan lama tapi inilah jawaban saya:
dan jika Anda menggunakan kode terlebih dahulu, Anda juga bisa mengglobal pesan kesalahan Anda menggunakan beberapa file sumber
Sebagai contoh, saya memiliki dua file sumber daya terpisah ini, satu untuk kesalahan dan satu untuk nama properti dan saya menggunakannya sebagai berikut:
Seperti yang Anda lihat, saya telah sepenuhnya menerjemahkan pesan kesalahan saya termasuk nama properti, jadi saya kemudian dapat menggunakannya di pengguna nanti misalnya:
sumber