Saya bingung untuk ini:
Saya telah mendefinisikan kelas saya untuk pendekatan kerangka kerja entitas (4.1.3) pertama. Semuanya baik-baik saja (saya membuat tabel dll) sampai saya mulai Seed.
Sekarang ketika saya melakukan
Add-Migration "remigrate" ; Update-Database;
Saya mendapatkan kesalahan pada konsol paket "Validasi gagal untuk satu entitas atau lebih. Lihat properti 'EntityValidationErrors' untuk detail lebih lanjut."
Saya memiliki breakpoint dalam metode Seed () saya tetapi karena saya menjalankan ini pada konsol ketika proyek tidak berjalan, saya tidak tahu bagaimana cara untuk mendapatkan rincian (PS - Saya telah melihat thread Validasi gagal untuk satu atau lebih entitas sambil menyimpan perubahan ke Database SQL Server menggunakan Entity Framework yang menunjukkan bagaimana saya bisa melihat properti.)
Saya tahu bahwa metode Seed () saya memiliki masalah karena jika saya mengembalikan tepat setelah panggilan metode, kesalahan hilang. Jadi bagaimana cara mengatur breakpoint saya sehingga saya bisa melihat apa kesalahan validasi itu? Agak hilang. Atau ada cara lain untuk melacaknya di konsol nuget ??
Jawaban:
Saya merasa terganggu dengan hal ini baru-baru ini juga. Saya memperbaikinya dengan meletakkan fungsi wrapper di kelas Konfigurasi dalam metode Seed, dan menggantikan panggilan
SaveChanges
dengan panggilan ke fungsi saya. Fungsi ini hanya akan menyebutkan kesalahan dalamEntityValidationErrors
koleksi, dan rethrow pengecualian di mana pesan Pengecualian daftar masalah individu. Ini membuat output muncul di konsol manajer paket NuGet.Kode berikut:
Cukup ganti panggilan ke
context.SaveChanges()
denganSaveChanges(context)
dalam metode seed Anda.sumber
public override int SaveChanges()
di dalam konteks.Perpanjang Kelas DBContek Anda Sudah Dengan Definisi Kelas Sebagian!
Jika Anda melihat definisi kelas untuk DbContext Anda, itu akan menjadi seperti berikut:
Jadi, di file lain Anda dapat membuat definisi yang sama dan mengganti bagian yang Anda inginkan.
Seluruh ide dengan kelas parsial --did Anda melihat DbContext adalah class-- parsial adalah bahwa Anda dapat memperpanjang kelas yang telah dihasilkan (atau mengatur kelas menjadi beberapa file) dan dalam kasus kami, kami juga ingin menimpa para SaveChanges metode dari dalam kelas parsial yang menambah DbContext .
Dengan cara ini kita bisa mendapatkan informasi kesalahan debug dari semua panggilan DbContext / SaveChanges yang ada di mana-mana dan tidak perlu mengubah kode Seed atau kode pengembangan sama sekali.
Inilah yang akan saya lakukan ( Perhatikan perbedaannya adalah bahwa saya hanya mengganti metode SaveChanges di kelas parsial DbContext buatan kami sendiri , BUKAN SATU HAL YANG DIHASILKAN ). Juga, pastikan Anda sebagian kelas menggunakan namespace yang benar atau Anda akan membenturkan kepala Anda ke dinding.
sumber
Saya mengonversi jawaban Richards ke metode ekstensi:
Panggil seperti ini:
sumber
Saya mengonversi versi craigvl ke C # Saya harus menambahkan context.SaveChanges (); agar bisa bekerja untuk saya seperti di bawah ini.
sumber
Terima kasih Richard karena telah membawa saya ke jalur yang benar (memiliki masalah yang sama) di bawah ini adalah alternatif tanpa pembungkus ini berfungsi untuk saya dalam metode seed konfigurasi migrasi:
Apakah kemudian dapat melihat pengecualian di konsol manajer paket. Semoga ini bisa membantu seseorang.
sumber
sumber