Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
Masuk ke Portal Microsoft Azure.
Klik BARU di bagian bawah halaman, lalu pilih SIMPAN:
Di wizard Pilih Add-on , pilih ClearDB MySQL Database, lalu klik panah Berikutnya di bagian bawah bingkai:
Pertahankan paket Gratis default, ubah NAMA menjadi IdentityMySQLDatabase, pilih wilayah yang terdekat dengan Anda, lalu klik panah Berikutnya di bagian bawah bingkai:
Klik tanda centang BELI untuk menyelesaikan pembuatan database.
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:
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:
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:
Buka Visual Studio 2103.
Klik Proyek Baru dari halaman Mulai , atau Anda bisa mengklik menu File lalu Proyek Baru:
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:
Dalam dialog Proyek ASP.NET Baru , pilih templat MVCdengan opsi default; ini akan mengonfigurasi Akun Pengguna Individu sebagai metode autentikasi. Klik OK:
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.
Buka proyek MVC Anda di Visual Studio.
Klik Alat, lalu klik Pengelola Paket NuGet, lalu klik Konsol Pengelola Paket:
Konsol Manajer Paket akan muncul di bagian bawah Visual Studio. Ketik "Update-Package EntityFramework" dan tekan Enter:
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.]
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.
Buka file Web.config untuk proyek Anda di Visual Studio 2013.
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>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>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:
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(); } } }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:
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(); } } } } }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:
Tekan Ctrl + F5 untuk membangun dan menjalankan aplikasi web.
Klik tab Daftar di bagian atas halaman:
Masukkan nama pengguna dan kata sandi baru, lalu klik Daftar:
Pada titik ini, tabel identitas ASP.NET dibuat di Database MySQL, dan pengguna terdaftar dan masuk ke aplikasi:
Menginstal alat MySQL Workbench untuk memverifikasi data
Instal alat MySQL Workbench dari halaman unduhan MySQL
Di wizard penginstalan: tab Pilihan Fitur , pilih MySQL Workbench di bawah bagian aplikasi .
Luncurkan aplikasi dan tambahkan koneksi baru menggunakan data string koneksi dari database Azure MySQL yang Anda buat di awal tutorial ini.
Setelah membuat koneksi, periksa tabel identitas ASP.NET yang dibuat pada IdentityMySQLDatabase.
Anda akan melihat bahwa semua tabel ASP.NET Identity yang diperlukan dibuat seperti yang ditunjukkan pada gambar di bawah ini:
Periksa tabel aspnetusers misalnya untuk memeriksa entri saat Anda mendaftarkan pengguna baru.














