Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sanatçı : Maurycy Markowski, Raquel Soares De Almeida, Robert McMurray
Bu öğreticide , ASP.NET Identity için varsayılan veri depolama mekanizmasını EntityFramework (SQL istemci sağlayıcısı) ile Bir MySQL sağlayıcısıyla nasıl değiştirdiğiniz gösterilir.
Bu öğreticide aşağıdaki konular ele alınacaktır:
- Azure'da MySQL veritabanı oluşturma
- Visual Studio 2013 MVC şablonu kullanarak MVC uygulaması oluşturma
- EntityFramework'i MySQL veritabanı sağlayıcısıyla çalışacak şekilde yapılandırma
- Sonuçları doğrulamak için uygulamayı çalıştırma
Bu öğreticinin sonunda, Azure'da barındırılan bir MySQL veritabanı kullanan ASP.NET Kimlik deposuna sahip bir MVC uygulamanız olacak.
Azure'da MySQL veritabanı örneği oluşturma
Azure Portal'da oturum açın.
Sayfanın alt kısmındaki YENİ'ye tıklayın ve MAĞAZA'yı seçin:
Eklenti Seçin sihirbazındaClearDB MySQL Veritabanı'nı seçin ve ardından çerçevenin altındaki İleri okuna tıklayın:
Varsayılan Ücretsiz planı koruyun, NAME değerini IdentityMySQLDatabase olarak değiştirin, size en yakın bölgeyi seçin ve ardından çerçevenin altındaki İleri okuna tıklayın:
Veritabanı oluşturmayı tamamlamak için SATIN AL onay işaretine tıklayın.
Veritabanınız oluşturulduktan sonra yönetim portalındaki EKLENTILER sekmesinden yönetebilirsiniz. Veritabanınızın bağlantı bilgilerini almak için sayfanın alt kısmındaki BAĞLANTI BİlGİLerİ'ne tıklayın:
CONNECTIONSTRING alanının kopyala düğmesine tıklayarak bağlantı dizesini kopyalayın ve kaydedin; Bu bilgileri bu öğreticinin ilerleyen bölümlerinde MVC uygulamanız için kullanacaksınız:
MVC uygulama projesi oluşturma
Öğreticinin bu bölümündeki adımları tamamlamak için öncelikle Web için Visual Studio Express 2013 veya Visual Studio 2013 yüklemeniz gerekir. Visual Studio yüklendikten sonra, yeni bir MVC uygulama projesi oluşturmak için aşağıdaki adımları kullanın:
Visual Studio 2103'i açın.
Başlangıçsayfasından Yeni Proje'ye tıklayın veya Dosya menüsüne ve ardından Yeni Proje'ye tıklayabilirsiniz:
Yeni Proje iletişim kutusu görüntülendiğinde, şablon listesinde Visual C# öğesini genişletin, ardından Web'e tıklayın ve Web Uygulaması'nı ASP.NET seçin. Projenizi IdentityMySQLDemo olarak adlandırıp Tamam'a tıklayın:
Yeni ASP.NET Projesi iletişim kutusunda, varsayılan seçeneklerle MVC şablonunu seçin; kimlik doğrulama yöntemi olarak Bireysel Kullanıcı Hesapları yapılandırılır. Tamam'a tıklayın:
EntityFramework'i MySQL veritabanıyla çalışacak şekilde yapılandırma
Projeniz için Entity Framework derlemesini güncelleştirme
Visual Studio 2013 şablonundan oluşturulan MVC uygulaması EntityFramework 6.0.0 paketine başvuru içeriyor, ancak sürümünden bu yana önemli performans geliştirmeleri içeren güncelleştirmeler yapıldı. Bu en son güncelleştirmeleri uygulamanızda kullanmak için aşağıdaki adımları kullanın.
MVC projenizi Visual Studio'da açın.
Araçlar'a, ardından NuGet Paket Yöneticisi'ne ve ardından Paket Yöneticisi Konsolu'nu tıklatın:
Paket Yöneticisi Konsolu, Visual Studio'nun alt bölümünde görünür. "Update-Package EntityFramework" yazın ve Enter tuşuna basın:
EntityFramework için MySQL sağlayıcısını yükleme
EntityFramework'in MySQL veritabanına bağlanabilmesi için bir MySQL sağlayıcısı yüklemeniz gerekir. Bunu yapmak için Paket Yöneticisi Konsolu'nu açın ve "Install-Package MySql.Data.Entity -Pre" yazın ve enter tuşuna basın.
Not
Bu derlemenin yayın öncesi sürümüdür ve bu nedenle hatalar içerebilir. Üretimde sağlayıcının yayın öncesi sürümünü kullanmamalısınız.
[Genişletmek için aşağıdaki resme tıklayın.]
Uygulamanızın Web.config dosyasında proje yapılandırma değişiklikleri yapma
Bu bölümde Entity Framework'ü az önce yüklediğiniz MySQL sağlayıcısını kullanacak, MySQL sağlayıcı fabrikasını kaydedecek ve Azure'dan bağlantı dizenizi ekleyecek şekilde yapılandıracaksınız.
Not
Aşağıdaki örnekler MySql.Data.dll için belirli bir derleme sürümünü içerir. Derleme sürümü değişirse, uygun yapılandırma ayarlarını doğru sürümle değiştirmeniz gerekir.
projenizin Web.config dosyasını Visual Studio 2013 açın.
Entity Framework için varsayılan veritabanı sağlayıcısını ve fabrikasını tanımlayan aşağıdaki yapılandırma ayarlarını bulun:
<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>
Bu yapılandırma ayarlarını, Entity Framework'ün MySQL sağlayıcısını kullanacak şekilde yapılandırılacağı aşağıdakilerle değiştirin:
<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>
<connectionStrings> bölümünü bulun ve azure'da barındırılan MySQL veritabanınızın bağlantı dizesini tanımlayan aşağıdaki kodla değiştirin (providerName değerinin de özgünden değiştirildiğini unutmayın):
<connectionStrings> <add name="DefaultConnection" providerName="MySql.Data.MySqlClient" connectionString="[Insert your ConnectionString from Azure here]"/> </connectionStrings>
Özel MigrationHistory bağlamı ekleme
Entity Framework Code First, model değişikliklerini izlemek ve veritabanı şeması ile kavramsal şema arasındaki tutarlılığı sağlamak için MigrationHistory tablosu kullanır. Ancak, birincil anahtar çok büyük olduğundan bu tablo varsayılan olarak MySQL için çalışmaz. Bu durumu düzeltmek için bu tablonun anahtar boyutunu küçültmeniz gerekir. Bunu yapmak için aşağıdaki adımları kullanın:
Bu tablonun şema bilgileri, başka bir DbContext olarak değiştirilebilen bir HistoryContext içinde yakalanır. Bunu yapmak için projeye MySqlHistoryContext.cs adlı yeni bir sınıf dosyası ekleyin ve içeriğini aşağıdaki kodla değiştirin:
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(); } } }
Daha sonra Entity Framework'i varsayılan değer yerine değiştirilmiş HistoryContext'i kullanacak şekilde yapılandırmanız gerekir. Bu, kod tabanlı yapılandırma özelliklerinden yararlanılarak yapılabilir. Bunu yapmak için projenize MySqlConfiguration.cs adlı yeni sınıf dosyası ekleyin ve içeriğini şununla değiştirin:
using System.Data.Entity; namespace IdentityMySQLDemo { public class MySqlConfiguration : DbConfiguration { public MySqlConfiguration() { SetHistoryContext( "MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema)); } } }
ApplicationDbContext için özel EntityFramework başlatıcısı oluşturma
Bu öğreticide öne çıkan MySQL sağlayıcısı şu anda Entity Framework geçişlerini desteklemediğinden veritabanına bağlanmak için model başlatıcıları kullanmanız gerekir. Bu öğretici Azure'da bir MySQL örneği kullandığından, özel bir Entity Framework başlatıcısı oluşturmanız gerekir.
Not
Azure'da bir SQL Server örneğine bağlanıyorsanız veya şirket içinde barındırılan bir veritabanı kullanıyorsanız bu adım gerekli değildir.
MySQL için özel bir Entity Framework başlatıcısı oluşturmak için aşağıdaki adımları kullanın:
Projeye MySqlInitializer.cs adlı yeni bir sınıf dosyası ekleyin ve içeriğini aşağıdaki kodla değiştirin:
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(); } } } } }
Models dizininde bulunan projenizin IdentityModels.cs dosyasını açın ve içeriğini aşağıdakilerle değiştirin:
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") { } } }
Uygulamayı çalıştırma ve veritabanını doğrulama
Önceki bölümlerdeki adımları tamamladıktan sonra veritabanınızı test etmelisiniz. Bunu yapmak için aşağıdaki adımları kullanın:
Web uygulamasını derlemek ve çalıştırmak için Ctrl + F5 tuşlarına basın.
Sayfanın üst kısmındaki Kaydet sekmesine tıklayın:
Yeni bir kullanıcı adı ve parola girip Kaydet'e tıklayın:
Bu noktada ASP.NET Identity tabloları MySQL Veritabanında oluşturulur ve kullanıcı kaydedilir ve uygulamada oturum açar:
Verileri doğrulamak için MySQL Workbench aracını yükleme
MySQLindirmeleri sayfasından MySQL Workbench aracını yükleme
Yükleme sihirbazında: Özellik Seçimi sekmesinde, uygulamalar bölümünde MySQL Workbench'i seçin.
Uygulamayı başlatın ve bu öğreticinin başında oluşturduğunuz Azure MySQL veritabanındaki bağlantı dizesi verilerini kullanarak yeni bir bağlantı ekleyin.
Bağlantıyı kurduktan sonra IdentityMySQLDatabase üzerinde oluşturulan ASP.NET Identity tablolarını inceleyin.
Aşağıdaki görüntüde gösterildiği gibi tüm ASP.NET Kimliği gerekli tabloların oluşturulduğunu göreceksiniz:
Örneğin, yeni kullanıcıları kaydederken girişleri denetlemek için aspnetusers tablosunu inceleyin.