Pertanyaan Ubah ASP.NET Identity untuk menggunakan database yang ada


Saya menggunakan ASP.NET MVC 5 dengan alur kerja Database-Pertama. Saya telah membuat tabel Identitas (AspNetUsers, AspNetRoles dll.) di database saya yang ada namun saya mengalami masalah dalam mendapatkan daftar dan masuk fungsi berfungsi dengan benar.

Ini adalah IdentityModels.cs kelas

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("MyConnectionString") // I use "MyConnectionString" instead of "DefaultConnection" 
    {
    }

Ini adalah apa string koneksi EF dari web.config seperti

<connectionStrings><add name="MyConnectionString" connectionString="metadata=res://*/Entities.MyModel.csdl|res://*/Entities.MyModel.ssdl|res://*/Entities.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=My-Pc\SQLEXPRESS;initial catalog=MyExistingDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Dan untuk ukuran yang baik inilah kelas konteks yang dihasilkan dari edmx

public partial class MyConnectionString : DbContext
{
    public MyConnectionString()
        : base("name=MyConnectionString")
    {
    }

Bagi saya semua tampaknya baik dan harus dapat membuat pengguna dalam database namun saya mendapatkan kesalahan berikut ketika masuk atau mencoba mendaftar masing-masing:

Untuk masuk:

Jenis entitas ApplicationUser bukan bagian dari model untuk   konteks saat ini

Baris 73: hasil var = menunggu SignInManager.PasswordSignInAsync (model.Email,   model.Password, model.RememberMe, shouldLockout: false);

Detail Pengecualian: System.InvalidOperationException: Tipe entitas   ApplicationUser bukan bagian dari model untuk konteks saat ini.

Untuk mendaftar:

Jenis entitas ApplicationUser bukan bagian dari model untuk   konteks saat ini

Baris 155: hasil var = menunggu UserManager.CreateAsync (pengguna,   model.Password);

Detail Pengecualian: System.InvalidOperationException: Tipe entitas   ApplicationUser bukan bagian dari model untuk konteks saat ini.

Sebagian besar artikel di sekitar tampaknya berfokus pada Kode-Pertama dan bagaimana cara beralih dari LocalDb ke SQLExpress dll. Dan bagaimana mengubah string koneksi, tetapi saya belum dapat menyelesaikan masalah ini untuk waktu yang cukup lama.

Edit, solusi: Seperti @ChrFin disebutkan Anda dapat menggunakan keduanya berdampingan yang akhirnya saya lakukan. Saya hanya menambahkan yang baru reguler string koneksi dalam web.config dan biarkan menunjuk ke database yang ada. PS. ingat bahwa nama string sambungan tidak boleh sama dengan yang sudah ada dan harus sama dengan yang Anda berikan pada ApplicationDbContext konstruktor.


5
2017-09-16 10:45


asal


Jawaban:


Saya BERPIKIR skenario ini tidak didukung oleh ASP.NET Identity karena membutuhkan DbContext yang meluas IdentityDbContext<ApplicationUser> (atau serupa).

Mengapa Anda memaksakan Identitas ke dalam konteks DB-Pertama Anda?
Anda dapat menggunakan konteks Kode-Pertama untuk Identitas bersama konteks DB-Pertama Anda yang lain tanpa masalah ...


5
2017-09-16 10:50



Anda dapat menyelesaikan masalah ini dengan mengikuti langkah-langkah ini:

  • 1-membuat tabel aspnetuser dll pada database Anda (apapun DB yang Anda inginkan menggunakan)
  • cukup hubungkan aplikasi dengan database yang tidak menggunakan framework entitas, saya katakan hanya koneksi sederhana.
  • Anda akan menemukan string koneksi dalam file web.config.

  • tempatkan string koneksi ini ke dalam model identitas clsss

  • Metode Register dan Token Anda sekarang berjalan
  • sekarang Anda dapat menggunakan entitas framewoek untuk sisa tabel Anda dengan pendekatan data pertama

0
2017-11-18 06:47