Saya telah bermain-main dengan MVC 5 baru, saya memiliki beberapa model, pengontrol, dan pengaturan tampilan menggunakan migrasi kode pertama.
Pertanyaan saya adalah bagaimana cara memasukkan pengguna dan peran? Saat ini saya memasukkan beberapa data referensi dalam metode Seed saya di Configuration.cs. Namun menurut saya, tabel pengguna dan peran tidak dibuat hingga sesuatu yang pertama mengenai AccountController.
Saat ini saya memiliki dua string koneksi sehingga saya dapat memisahkan data saya dari otentikasi saya ke dalam database yang berbeda.
Bagaimana cara agar tabel pengguna, peran, dll. Terisi bersama dengan yang lain? Dan bukan saat pengontrol akun dipukul?
asp.net-mvc
asp.net-mvc-5
ef-migrations
seeding
MrBeanzy
sumber
sumber
Jawaban:
Berikut adalah contoh pendekatan Seed biasa:
Saya menggunakan manajer paket "update-database". DB dan semua tabel dibuat dan diunggulkan dengan data.
sumber
context.Users.Add(user);
antaramanager.Create(user, "ChangeItAsap!");
danmanager.AddToRole(user.Id, "AppAdmin");
. Jadi pengguna yang baru lahir belum memiliki User.Id.Ini tambahan kecil, tetapi untuk siapa pun yang memiliki "UserId tidak ditemukan". pesan ketika mencoba untuk seed: (Tom Regan memiliki pertanyaan ini di komentar, dan saya terjebak di dalamnya sendiri untuk sementara waktu)
Ini berarti bahwa manager.Create (pengguna, "ChangeItAsap!") Tidak berhasil. Ini mungkin memiliki alasan yang berbeda, tetapi bagi saya itu karena kata sandi saya tidak berhasil validasinya.
Saya memiliki validator kata sandi khusus, yang tidak dipanggil saat melakukan seeding database, jadi aturan validasi yang saya gunakan (minlength 4 bukannya default 6) tidak berlaku. Pastikan kata sandi Anda (dan semua bidang lain dalam hal ini) melewati validasi.
sumber
IdentityResult result = manager.Create(user, "ChangeItAsap!"); if (result.Succeeded == false) { throw new Exception(result.Errors.First()); }
Ini adalah metode saya berdasarkan jawaban Valin, saya telah menambahkan peran dalam db dan menambahkan kata sandi untuk pengguna. Kode ini ditempatkan dalam
Seed()
metode di Migration> Configurations.cs.sumber
Di sini saya punya solusi yang sangat mudah, bersih dan halus.
sumber
sumber
Task.Run(async () => { await SeedAsync(context); }).Wait();
. Anda sebaiknya menulisSeedAsync(context).GetAwait().GetResult();
yang sedikit lebih baik.Sepertinya mereka mengubah cara kerja otentikasi di MVC5, mengubah Global.asax.cs saya menjadi yang berikut berhasil!
sumber
tulis kode ini di Konfigurasi Migrasi Anda.
sumber