Bagikan melalui


identitas ASP.NET: Menggunakan Penyimpanan MySQL dengan Penyedia EntityFramework MySQL (C#)

oleh Maurycy Markowski, Raquel Soares De Almeida, Robert McMurray

Tutorial ini menunjukkan kepada Anda cara mengganti mekanisme penyimpanan data default untuk identitas ASP.NET dengan EntityFramework (penyedia klien SQL) dengan penyedia MySQL.

Topik berikut akan dibahas dalam tutorial ini:

  • Membuat database MySQL di Azure
  • Membuat aplikasi MVC menggunakan templat MVC Visual Studio 2013
  • Mengonfigurasi EntityFramework untuk bekerja dengan penyedia database MySQL
  • Menjalankan aplikasi untuk memverifikasi hasilnya

Di akhir tutorial ini, Anda akan memiliki aplikasi MVC dengan ASP.NET Identity store yang menggunakan database MySQL yang dihosting di Azure.

Membuat instans database MySQL di Azure

  1. Masuk ke Portal Microsoft Azure.

  2. Klik BARU di bagian bawah halaman, lalu pilih SIMPAN:

    Cuplikan layar menu Portal Microsoft Azure dengan item menu Toko disorot di bagian bawah dan diuraikan dengan persegi panjang merah.

  3. Di wizard Pilih Add-on , pilih ClearDB MySQL Database, lalu klik panah Berikutnya di bagian bawah bingkai:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar wizard Pilih Add-on, dengan Hapus D B Database My S Q L disorot dengan persegi panjang merah.

  4. Pertahankan paket Gratis default, ubah NAMA menjadi IdentityMySQLDatabase, pilih wilayah yang terdekat dengan Anda, lalu klik panah Berikutnya di bagian bawah bingkai:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar dialog Personalisasi Add-on memperlihatkan opsi Paket gratis dan bidang Nama dan wilayah dipilih dan disorot dengan persegi panjang merah.

  5. Klik tanda centang BELI untuk menyelesaikan pembuatan database.

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar dialog Tinjau Pembelian memperlihatkan tombol Beli disorot dengan persegi panjang merah.

  6. Setelah database Anda dibuat, Anda bisa mengelolanya dari tab ADD-ONS di portal manajemen. Untuk mengambil informasi koneksi untuk database Anda, klik INFO KONEKSI di bagian bawah halaman:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar portal manajemen dengan tab Tambahkan Aktif, item database Identifikasi S Q L Saya, dan tombol Info Koneksi disorot dengan warna merah.

  7. Salin string koneksi dengan mengklik tombol salin oleh bidang CONNECTIONSTRING dan simpan; Anda akan menggunakan informasi ini nanti dalam tutorial ini untuk aplikasi MVC Anda:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar dialog Info koneksi dengan tombol salin disorot di sebelah kanan bidang String Koneksi.

Membuat proyek aplikasi MVC

Untuk menyelesaikan langkah-langkah di bagian tutorial ini, Anda harus menginstal Visual Studio Express 2013 untuk Web atau Visual Studio 2013 terlebih dahulu. Setelah Visual Studio diinstal, gunakan langkah-langkah berikut untuk membuat proyek aplikasi MVC baru:

  1. Buka Visual Studio 2103.

  2. Klik Proyek Baru dari halaman Mulai , atau Anda bisa mengklik menu File lalu Proyek Baru:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar halaman mulai Visual Studio memperlihatkan opsi Proyek Baru disorot dengan persegi panjang merah.

  3. Saat kotak dialog Proyek Baru ditampilkan, perluas Visual C# dalam daftar templat, lalu klik Web, dan pilih ASP.NET Aplikasi Web. Beri nama proyek Anda IdentityMySQLDemo lalu klik OK:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar kotak dialog Proyek Baru, dengan tanda hash Visual C diperluas di kiri dan Web disorot. Aplikasi Web ASP dot NET dipilih di sebelah kanan dengan nama proyek Identity My S Q L Demo di bidang nama di bagian bawah.

  4. Dalam dialog Proyek ASP.NET Baru , pilih templat MVCdengan opsi default; ini akan mengonfigurasi Akun Pengguna Individu sebagai metode autentikasi. Klik OK:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar dialog Proyek NET titik S S P Baru, dengan templat M V C dipilih dan opsi default dicentang.

Mengonfigurasi EntityFramework untuk bekerja dengan database MySQL

Memperbarui rakitan Kerangka Kerja Entitas untuk proyek Anda

Aplikasi MVC yang dibuat dari templat Visual Studio 2013 berisi referensi ke paket EntityFramework 6.0.0 , tetapi telah ada pembaruan untuk rakitan tersebut sejak rilisnya yang berisi peningkatan performa yang signifikan. Untuk menggunakan pembaruan terbaru ini di aplikasi Anda, gunakan langkah-langkah berikut.

  1. Buka proyek MVC Anda di Visual Studio.

  2. Klik Alat, lalu klik Pengelola Paket NuGet, lalu klik Konsol Pengelola Paket:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar proyek M V C di Visual Studio, dengan Alat dipilih di menu atas, Manajer Paket Pustaka dipilih di kiri dan Konsol Manajer Paket dipilih di kanan.

  3. Konsol Manajer Paket akan muncul di bagian bawah Visual Studio. Ketik "Update-Package EntityFramework" dan tekan Enter:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar Konsol Manajer Paket di bagian bawah Visual Studio, dengan instruksi Perbarui Kerangka Kerja Entitas Paket ditampilkan pada baris perintah.

Menginstal penyedia MySQL untuk EntityFramework

Agar EntityFramework tersambung ke database MySQL, Anda perlu menginstal penyedia MySQL. Untuk melakukannya, buka Package Manager Console dan ketik "Install-Package MySql.Data.Entity -Pre", lalu tekan Enter.

Catatan

Ini adalah versi perakitan pra-rilis, dan karenanya mungkin berisi bug. Anda tidak boleh menggunakan versi pra-rilis penyedia dalam produksi.

[Klik gambar berikut untuk memperluasnya.]

Cuplikan layar Konsol Manajer Paket di bagian bawah Visual Studio, dengan Install-Package instruksi Pra tanda hubung Entitas titik Data titik S q saya ditampilkan pada baris perintah.

Membuat perubahan konfigurasi proyek pada file Web.config untuk aplikasi Anda

Di bagian ini Anda akan mengonfigurasi Kerangka Kerja Entitas untuk menggunakan penyedia MySQL yang baru saja Anda instal, mendaftarkan pabrik penyedia MySQL, dan menambahkan string koneksi Anda dari Azure.

Catatan

Contoh berikut berisi versi rakitan tertentu untuk MySql.Data.dll. Jika versi rakitan berubah, Anda harus mengubah pengaturan konfigurasi yang sesuai dengan versi yang benar.

  1. Buka file Web.config untuk proyek Anda di Visual Studio 2013.

  2. Temukan pengaturan konfigurasi berikut, yang menentukan penyedia database dan pabrik default untuk Kerangka Kerja Entitas:

    <entityFramework>
      <defaultConnectionFactory
          type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="v11.0" />
        </parameters>
      </defaultConnectionFactory>
      <providers>
        <provider
          invariantName="System.Data.SqlClient"
          type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      </providers>
    </entityFramework>
    
  3. Ganti pengaturan konfigurasi tersebut dengan yang berikut ini, yang akan mengonfigurasi Kerangka Kerja Entitas untuk menggunakan penyedia MySQL:

    <entityFramework>
      <providers>
        <provider invariantName="MySql.Data.MySqlClient"
          type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity"/> 
      </providers>
    </entityFramework>
    <system.data>
      <DbProviderFactories>
        <remove invariant="MySql.Data.MySqlClient"></remove>
        <add name="MySQL Data Provider"
          invariant="MySql.Data.MySqlClient"
          description=".Net Framework Data Provider for MySQL"
          type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.2.0"/>
      </DbProviderFactories>
    </system.data>
    
  4. Temukan bagian <connectionStrings> dan ganti dengan kode berikut, yang akan menentukan string koneksi untuk database MySQL Anda yang dihosting di Azure (perhatikan bahwa nilai providerName juga telah diubah dari yang asli):

    <connectionStrings>
      <add name="DefaultConnection"
        providerName="MySql.Data.MySqlClient"
        connectionString="[Insert your ConnectionString from Azure here]"/>
    </connectionStrings>
    

Menambahkan konteks MigrationHistory kustom

Kode Kerangka Kerja Entitas Pertama menggunakan tabel MigrationHistory untuk melacak perubahan model dan untuk memastikan konsistensi antara skema database dan skema konseptual. Namun, tabel ini tidak berfungsi untuk MySQL secara default karena kunci primer terlalu besar. Untuk mengatasi situasi ini, Anda harus menyusutkan ukuran kunci untuk tabel tersebut. Untuk melakukannya, gunakan langkah-langkah berikut:

  1. Informasi skema untuk tabel ini diambil dalam HistoryContext, yang dapat dimodifikasi sebagai DbContext lainnya. Untuk melakukannya, tambahkan file kelas baru bernama MySqlHistoryContext.cs ke proyek, dan ganti kontennya dengan kode berikut:

    using System.Data.Common;
    using System.Data.Entity;
    using System.Data.Entity.Migrations.History;
     
    namespace IdentityMySQLDemo
    {
      public class MySqlHistoryContext : HistoryContext
      {
        public MySqlHistoryContext(
          DbConnection existingConnection,
          string defaultSchema)
        : base(existingConnection, defaultSchema)
        {
        }
     
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
          base.OnModelCreating(modelBuilder);
          modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength(100).IsRequired();
          modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength(200).IsRequired();
        }
      }
    }
    
  2. Selanjutnya Anda harus mengonfigurasi Kerangka Kerja Entitas untuk menggunakan HistoryContext yang dimodifikasi, bukan default. Ini dapat dilakukan dengan memanfaatkan fitur konfigurasi berbasis kode. Untuk melakukannya, tambahkan file kelas baru bernama MySqlConfiguration.cs ke proyek Anda dan ganti kontennya dengan:

    using System.Data.Entity;
     
    namespace IdentityMySQLDemo
    {
      public class MySqlConfiguration : DbConfiguration
      {
        public MySqlConfiguration()
        {
          SetHistoryContext(
          "MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));
        }
      }
    }
    

Membuat penginisialisasi EntityFramework kustom untuk ApplicationDbContext

Penyedia MySQL yang ditampilkan dalam tutorial ini saat ini tidak mendukung migrasi Kerangka Kerja Entitas, jadi Anda harus menggunakan penginisialisasi model untuk menyambungkan ke database. Karena tutorial ini menggunakan instans MySQL di Azure, Anda harus membuat penginisialisasi Kerangka Kerja Entitas kustom.

Catatan

Langkah ini tidak diperlukan jika Anda menyambungkan ke instans SQL Server di Azure atau jika Anda menggunakan database yang dihosting secara lokal.

Untuk membuat penginisialisasi Entity Framework kustom untuk MySQL, gunakan langkah-langkah berikut:

  1. Tambahkan file kelas baru bernama MySqlInitializer.cs ke proyek, dan ganti kontennya dengan kode berikut:

    using IdentityMySQLDemo.Models;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Linq;
    
    namespace IdentityMySQLDemo
    {
      public class MySqlInitializer : IDatabaseInitializer<ApplicationDbContext>
      {
        public void InitializeDatabase(ApplicationDbContext context)
        {
          if (!context.Database.Exists())
          {
            // if database did not exist before - create it
            context.Database.Create();
          }
          else
          {
            // query to check if MigrationHistory table is present in the database 
            var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
              "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'IdentityMySQLDatabase' AND table_name = '__MigrationHistory'");
    
            // if MigrationHistory table is not there (which is the case first time we run) - create it
            if (migrationHistoryTableExists.FirstOrDefault() == 0)
            {
              context.Database.Delete();
              context.Database.Create();
            }
          }
        }
      }
    }
    
  2. Buka file IdentityModels.cs untuk proyek Anda, yang terletak di direktori Model , dan ganti kontennya dengan yang berikut ini:

    using Microsoft.AspNet.Identity.EntityFramework;
    using System.Data.Entity;
    
    namespace IdentityMySQLDemo.Models
    {
      // You can add profile data for the user by adding more properties to your ApplicationUser
      // class, please visit https://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
      public class ApplicationUser : IdentityUser
      {
      }
    
      public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
      {
        static ApplicationDbContext()
        {
          Database.SetInitializer(new MySqlInitializer());
        }
    
        public ApplicationDbContext()
          : base("DefaultConnection")
        {
        }
      }
    }
    

Menjalankan aplikasi dan memverifikasi database

Setelah Anda menyelesaikan langkah-langkah di bagian sebelumnya, Anda harus menguji database Anda. Untuk melakukannya, gunakan langkah-langkah berikut:

  1. Tekan Ctrl + F5 untuk membangun dan menjalankan aplikasi web.

  2. Klik tab Daftar di bagian atas halaman:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar situs web A S P dot NET, dengan tab Daftar disorot di menu di kanan atas.

  3. Masukkan nama pengguna dan kata sandi baru, lalu klik Daftar:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar dialog pendaftaran S P dot NET, dengan nama pengguna, kata sandi, dan konfirmasi bidang kata sandi selesai dan tombol Daftar disorot di bawah ini.

  4. Pada titik ini, tabel identitas ASP.NET dibuat di Database MySQL, dan pengguna terdaftar dan masuk ke aplikasi:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar situs web S P dot NET setelah pengguna menyelesaikan pendaftaran. Tab dengan salam Halo, diikuti dengan nama pengguna, disorot di menu di kanan atas.

Menginstal alat MySQL Workbench untuk memverifikasi data

  1. Instal alat MySQL Workbench dari halaman unduhan MySQL

  2. Di wizard penginstalan: tab Pilihan Fitur , pilih MySQL Workbench di bawah bagian aplikasi .

  3. Luncurkan aplikasi dan tambahkan koneksi baru menggunakan data string koneksi dari database Azure MySQL yang Anda buat di awal tutorial ini.

  4. Setelah membuat koneksi, periksa tabel identitas ASP.NET yang dibuat pada IdentityMySQLDatabase.

  5. Anda akan melihat bahwa semua tabel ASP.NET Identity yang diperlukan dibuat seperti yang ditunjukkan pada gambar di bawah ini:

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar dialog alat My S Q L Workbench. Tabel Identitas S P dot NET yang dibuat pada Database Identitas S Q L Saya disorot di kiri bawah.

  6. Periksa tabel aspnetusers misalnya untuk memeriksa entri saat Anda mendaftarkan pengguna baru.

    [Klik gambar berikut untuk memperluasnya. ] Cuplikan layar tabel pengguna s p net, dengan entri yang menampilkan kolom I D, Nama Pengguna, Hash Kata Sandi, Stempel Keamanan, dan Diskriminator.