Aracılığıyla paylaş


ASP.NET Identity: Bir EntityFramework MySQL Sağlayıcısı ile MySQL Depolama Kullanma (C#)

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

  1. Azure Portal'da oturum açın.

  2. Sayfanın alt kısmındaki YENİ'ye tıklayın ve MAĞAZA'yı seçin:

    Aşağıda Mağaza menü öğesinin vurgulandığı ve kırmızı dikdörtgenle vurgulandığı Azure Portal menüsünün ekran görüntüsü.

  3. Eklenti Seçin sihirbazındaClearDB MySQL Veritabanı'nı seçin ve ardından çerçevenin altındaki İleri okuna tıklayın:

    [Genişletmek için aşağıdaki resme tıklayın. ] D B S Q L Veritabanını Temizle seçeneğinin kırmızı dikdörtgenle vurgulandığı Eklenti Seçme sihirbazının ekran görüntüsü.

  4. 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:

    [Genişletmek için aşağıdaki resme tıklayın. ] Ücretsiz plan seçeneğini ve Seçili ve kırmızı dikdörtgenle vurgulanmış Ad ve bölge alanlarını gösteren Eklentiyi Kişiselleştir iletişim kutusunun ekran görüntüsü.

  5. Veritabanı oluşturmayı tamamlamak için SATIN AL onay işaretine tıklayın.

    [Genişletmek için aşağıdaki resme tıklayın. ] Satın Al düğmesinin kırmızı dikdörtgenle vurgulandığı Satın Alma İşlemini Gözden Geçir iletişim kutusunun ekran görüntüsü.

  6. 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:

    [Genişletmek için aşağıdaki resme tıklayın. ] Yönetim portalının, Eklentiler sekmesi, S Q L veritabanımı tanımla öğesi ve Bağlantı Bilgileri düğmesinin kırmızıyla vurgulandığı ekran görüntüsü.

  7. 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:

    [Genişletmek için aşağıdaki resme tıklayın. ] Bağlantı Dizesi alanının sağında kopyala düğmesinin vurgulandığı Bağlantı bilgileri iletişim kutusunun ekran görüntüsü.

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:

  1. Visual Studio 2103'i açın.

  2. Başlangıçsayfasından Yeni Proje'ye tıklayın veya Dosya menüsüne ve ardından Yeni Proje'ye tıklayabilirsiniz:

    [Genişletmek için aşağıdaki resme tıklayın. ] Yeni Proje seçeneğinin kırmızı dikdörtgenle vurgulandığı Visual Studio başlangıç sayfasının ekran görüntüsü.

  3. 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:

    [Genişletmek için aşağıdaki resme tıklayın. ] Visual C karma işaretinin solda genişletilmiş ve Web'in vurgulandığı Yeni Proje iletişim kutusunun ekran görüntüsü. Asp dot NET Web Application en alttaki ad alanında proje adı Identity My S Q L Demo ile sağ tarafta seçilidir.

  4. 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:

    [Genişletmek için aşağıdaki resme tıklayın. ] M V C şablonunun seçili ve varsayılan seçeneklerin işaretli olduğu Yeni A S P nokta NET Projesi iletişim kutusunun ekran görüntüsü.

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.

  1. MVC projenizi Visual Studio'da açın.

  2. Araçlar'a, ardından NuGet Paket Yöneticisi'ne ve ardından Paket Yöneticisi Konsolu'nu tıklatın:

    [Genişletmek için aşağıdaki resme tıklayın. ] Visual Studio'da M V C projesinin ekran görüntüsü; üst menüde Araçlar, solda Kitaplık Paket Yöneticisi ve sağda Paket Yöneticisi Konsolu seçili durumda.

  3. 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:

    [Genişletmek için aşağıdaki resme tıklayın. ] Visual Studio'nun alt bölümündeki Paket Yöneticisi Konsolu'nun ekran görüntüsü ve komut satırında Paket Varlık Çerçevesini Güncelleştirme yönergesi görüntüleniyor.

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.]

Visual Studio'nun alt bölümündeki Paket Yöneticisi Konsolu'nun ekran görüntüsü; komut satırında Install-Package S q l nokta Veri noktası Varlık tire Ön yönergesi görüntülenir.

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.

  1. projenizin Web.config dosyasını Visual Studio 2013 açın.

  2. 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>
    
  3. 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>
    
  4. <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:

  1. 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();
        }
      }
    }
    
  2. 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:

  1. 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();
            }
          }
        }
      }
    }
    
  2. 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:

  1. Web uygulamasını derlemek ve çalıştırmak için Ctrl + F5 tuşlarına basın.

  2. Sayfanın üst kısmındaki Kaydet sekmesine tıklayın:

    [Genişletmek için aşağıdaki resme tıklayın. ] Sağ üstteki menüde Kaydet sekmesinin vurgulandığı S P nokta NET web sitesinin ekran görüntüsü.

  3. Yeni bir kullanıcı adı ve parola girip Kaydet'e tıklayın:

    [Genişletmek için aşağıdaki resme tıklayın. ] Kullanıcı adı, parola ve parola alanlarının tamamlandığını onaylayın ve Aşağıda Kaydet düğmesinin vurgulandığı S P nokta NET kayıt iletişim kutusunun ekran görüntüsü.

  4. Bu noktada ASP.NET Identity tabloları MySQL Veritabanında oluşturulur ve kullanıcı kaydedilir ve uygulamada oturum açar:

    [Genişletmek için aşağıdaki resme tıklayın. ] Kullanıcı kaydı tamamladıktan sonra S P nokta NET web sitesinin ekran görüntüsü. Sağ üstteki menüde Hello karşılaması ve ardından kullanıcı adı vurgulanmış sekme.

Verileri doğrulamak için MySQL Workbench aracını yükleme

  1. MySQLindirmeleri sayfasından MySQL Workbench aracını yükleme

  2. Yükleme sihirbazında: Özellik Seçimi sekmesinde, uygulamalar bölümünde MySQL Workbench'i seçin.

  3. 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.

  4. Bağlantıyı kurduktan sonra IdentityMySQLDatabase üzerinde oluşturulan ASP.NET Identity tablolarını inceleyin.

  5. 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:

    [Genişletmek için aşağıdaki resme tıklayın. ] S Q L Workbench aracı iletişim kutusunun ekran görüntüsü. Kimlik My S Q L Veritabanı'nda oluşturulan S P nokta NET Identity tabloları sol altta vurgulanır.

  6. Örneğin, yeni kullanıcıları kaydederken girişleri denetlemek için aspnetusers tablosunu inceleyin.

    [Genişletmek için aşağıdaki resme tıklayın. ] I D, Kullanıcı Adı, Parola Karması, Güvenlik Damgası ve Ayırıcı sütunlarını görüntüleyen girdilerin yer olduğu s p net users tablosunun ekran görüntüsü.