Sdílet prostřednictvím


ASP.NET Identity: Použití úložiště MySQL zprostředkovatele EntityFramework MySQL (C#)

Maurycy Markowski, Raquel Soares De Almeida, Robert McMurray

V tomto kurzu se dozvíte, jak nahradit výchozí mechanismus úložiště dat pro ASP.NET Identity entityFramework (zprostředkovatel klienta SQL) poskytovatelem MySQL.

V tomto kurzu se budeme probít těmito tématy:

  • Vytvoření databáze MySQL v Azure
  • Vytvoření aplikace MVC pomocí šablony Visual Studio 2013 MVC
  • Konfigurace EntityFramework pro práci s poskytovatelem databáze MySQL
  • Spuštění aplikace za účelem ověření výsledků

Na konci tohoto kurzu budete mít aplikaci MVC s úložištěm ASP.NET Identity, která používá databázi MySQL hostované v Azure.

Vytvoření instance databáze MySQL v Azure

  1. Přihlaste se k webu Azure Portal.

  2. Klikněte na NOVÝ v dolní části stránky a pak vyberte STORE:

    Snímek obrazovky s nabídkou webu Azure Portal se zvýrazněnou položkou nabídky Store (Store) v dolní části a zvýrazněnou červeným obdélníkem

  3. V průvodci Zvolit doplněk vyberte ClearDB MySQL Database a pak klikněte na šipku Další v dolní části rámce:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s průvodcem Zvolit doplněk se zvýrazněnou možností Vymazat databázi D B S Q L se zvýrazněným červeným obdélníkem

  4. Ponechte výchozí plán Free , změňte NÁZEV na IdentityMySQLDatabase, vyberte oblast, která je k vám nejblíže, a pak klikněte na šipku Další v dolní části rámce:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s dialogovým oknem Přizpůsobit doplněk s možností Bezplatný plán a vybranými a zvýrazněnými poli Název a oblast červeným obdélníkem

  5. Kliknutím na zaškrtnutí políčka KOUPIT dokončete vytváření databáze.

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s dialogovým oknem Zkontrolovat nákup se zvýrazněným tlačítkem Koupit s červeným obdélníkem

  6. Po vytvoření databáze ji můžete spravovat na kartě DOPLŇKY na portálu pro správu. Pokud chcete načíst informace o připojení pro vaši databázi, klikněte na INFORMACE O PŘIPOJENÍ v dolní části stránky:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky portálu pro správu s kartou Přidat, červeně zvýrazněnou položkou databáze Identify My S Q L (Identifikovat moji databázi Q L) a tlačítkem Connection Info (Informace o připojení)

  7. Zkopírujte připojovací řetězec kliknutím na tlačítko kopírování u pole CONNECTIONSTRING a uložte jej. Tyto informace použijete později v tomto kurzu pro aplikaci MVC:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s dialogovým oknem Informace o připojení a zvýrazněným tlačítkem Kopírovat napravo od pole Připojovací řetězec

Vytvoření projektu aplikace MVC

Abyste mohli dokončit kroky v této části kurzu, musíte nejdřív nainstalovat Visual Studio Express 2013 pro web nebo Visual Studio 2013. Po instalaci sady Visual Studio pomocí následujícího postupu vytvořte nový projekt aplikace MVC:

  1. Otevřete Visual Studio 2103.

  2. Na úvodní stránce klikněte na Nový projekt nebo můžete kliknout na nabídku Soubor a potom na Nový projekt:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky úvodní stránky sady Visual Studio se zvýrazněnou možností Nový projekt červeným obdélníkem

  3. Když se zobrazí dialogové okno Nový projekt , rozbalte visual C# v seznamu šablon, klikněte na Web a vyberte ASP.NET Webová aplikace. Pojmenujte projekt IdentityMySQLDemo a klikněte na OK:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s dialogovým oknem Nový projekt s rozbalenou značkou hash Visual C vlevo a zvýrazněnou možností Web Vpravo je vybraná webová aplikace ASP dot NET s názvem projektu Identity My S Q L Demo v poli názvu v dolní části.

  4. V dialogovém okně Nový projekt ASP.NET vyberte šablonu MVC s výchozími možnostmi. Tím se nakonfigurují jednotlivé uživatelské účty jako metoda ověřování. Klikněte na OK:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s dialogovým oknem Nový projekt S P dot NET s vybranou šablonou M V C a zaškrtnutými výchozími možnostmi

Konfigurace EntityFramework pro práci s databází MySQL

Aktualizace sestavení Entity Framework pro váš projekt

Aplikace MVC vytvořená ze šablony Visual Studio 2013 obsahuje odkaz na balíček EntityFramework 6.0.0, ale od jeho vydání došlo k aktualizacím sestavení, které obsahují významná vylepšení výkonu. Pokud chcete tyto nejnovější aktualizace používat ve své aplikaci, postupujte následovně.

  1. Otevřete projekt MVC v sadě Visual Studio.

  2. Klikněte na Nástroje, pak klikněte na Správce balíčků NuGet a pak klikněte na Konzola Správce balíčků:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s projektem M V C v sadě Visual Studio s vybranou možností Nástroje v horní nabídce, správcem balíčků knihovny vlevo a vybranou konzolou Správce balíčků vpravo.

  3. Konzola Správce balíčků se zobrazí v dolní části sady Visual Studio. Zadejte "Update-Package EntityFramework" a stiskněte Enter:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s konzolou Správce balíčků v dolní části sady Visual Studio s instrukcí Update Package Entity Framework zobrazenou na příkazovém řádku.

Instalace zprostředkovatele MySQL pro EntityFramework

Aby se EntityFramework mohla připojit k databázi MySQL, musíte nainstalovat poskytovatele MySQL. Uděláte to tak, že otevřete konzolu Správce balíčků , zadáte "Install-Package MySql.Data.Entity -Pre" a stisknete Klávesu Enter.

Poznámka

Toto je předběžná verze sestavení, která může obsahovat chyby. V produkčním prostředí byste neměli používat předběžnou verzi zprostředkovatele.

[Kliknutím na následující obrázek ho rozbalíte.]

Snímek obrazovky s konzolou Správce balíčků v dolní části sady Visual Studio s Install-Package My S q l l tt Data dot Entity dash Pre instruction zobrazenými na příkazovém řádku

Provádění změn konfigurace projektu v souboru Web.config pro vaši aplikaci

V této části nakonfigurujete Entity Framework tak, aby používala poskytovatele MySQL, kterého jste právě nainstalovali, zaregistrujete objekt pro vytváření zprostředkovatele MySQL a přidáte připojovací řetězec z Azure.

Poznámka

Následující příklady obsahují konkrétní verzi sestavení pro MySql.Data.dll. Pokud se změní verze sestavení, budete muset upravit odpovídající nastavení konfigurace pomocí správné verze.

  1. Otevřete soubor Web.config projektu v Visual Studio 2013.

  2. Vyhledejte následující nastavení konfigurace, která definují výchozího zprostředkovatele databáze a továrnu pro Entity Framework:

    <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. Nahraďte tato nastavení konfigurace následujícím nastavením, které nakonfigurují Entity Framework tak, aby používala zprostředkovatele 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. <Vyhledejte část connectionStrings> a nahraďte ji následujícím kódem, který definuje připojovací řetězec pro vaši databázi MySQL hostovanou v Azure (všimněte si, že hodnota providerName se také změnila oproti původní hodnotě):

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

Přidání vlastního kontextu MigrationHistory

Entity Framework Code First používá tabulku MigrationHistory ke sledování změn modelu a k zajištění konzistence mezi schématem databáze a koncepčním schématem. Tato tabulka ale ve výchozím nastavení pro MySQL nefunguje, protože primární klíč je příliš velký. Pokud chcete tuto situaci napravit, budete muset zmenšit velikost klíče pro danou tabulku. Můžete to udělat podle následujících kroků:

  1. Informace o schématu pro tuto tabulku jsou zachyceny v objektu HistoryContext, který lze upravit stejně jako jakýkoli jiný objekt DbContext. Uděláte to tak, že do projektu přidáte nový soubor třídy MySqlHistoryContext.cs a nahradíte jeho obsah následujícím kódem:

    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. Dále budete muset nakonfigurovat Entity Framework tak, aby místo výchozího používala upravený Objekt HistoryContext. Můžete to provést pomocí konfiguračních funkcí založených na kódu. Uděláte to tak, že do projektu přidáte nový soubor třídy MySqlConfiguration.cs a nahradíte jeho obsah tímto:

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

Vytvoření vlastního inicializátoru EntityFramework pro ApplicationDbContext

Poskytovatel MySQL, který je uveden v tomto kurzu, v současné době nepodporuje migrace Entity Framework, takže pro připojení k databázi budete muset použít inicializátory modelu. Vzhledem k tomu, že tento kurz používá instanci MySQL v Azure, budete muset vytvořit vlastní inicializátor Entity Framework.

Poznámka

Tento krok se nevyžaduje, pokud se připojujete k instanci SQL Server v Azure nebo pokud používáte databázi hostované místně.

Pokud chcete vytvořit vlastní inicializátor Entity Framework pro MySQL, postupujte následovně:

  1. Přidejte do projektu nový soubor třídy MySqlInitializer.cs a nahraďte jeho obsah následujícím kódem:

    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. Otevřete soubor IdentityModels.cs pro váš projekt, který se nachází v adresáři Models , a nahraďte jeho obsah následujícím kódem:

    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")
        {
        }
      }
    }
    

Spuštění aplikace a ověření databáze

Po dokončení kroků v předchozích částech byste měli databázi otestovat. Můžete to udělat podle následujících kroků:

  1. Stisknutím ctrl + F5 sestavte a spusťte webovou aplikaci.

  2. V horní části stránky klikněte na kartu Zaregistrovat :

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s webovou stránkou S P dot NET se zvýrazněnou kartou Registrace v nabídce v pravém horním rohu

  3. Zadejte nové uživatelské jméno a heslo a klikněte na Zaregistrovat:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s registračním dialogem S P dot NET s vyplněnými poli pro uživatelské jméno, heslo a potvrzení hesla a zvýrazněným tlačítkem Registrovat.

  4. V tomto okamžiku se v databázi MySQL vytvoří tabulky ASP.NET Identity a uživatel se zaregistruje a přihlásí k aplikaci:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s webem S P dot NET po dokončení registrace uživatelem V nabídce vpravo nahoře je zvýrazněná karta s pozdravem Hello následovaným uživatelským jménem.

Instalace nástroje MySQL Workbench pro ověření dat

  1. Instalace nástroje MySQL Workbench ze stránky pro stažení MySQL

  2. V průvodci instalací na kartě Výběr funkce vyberte MySQL Workbench v části Aplikace .

  3. Spusťte aplikaci a přidejte nové připojení pomocí dat připojovacího řetězce z databáze Azure MySQL, kterou jste vytvořili na začátku tohoto kurzu.

  4. Po navázání připojení zkontrolujte tabulky identity ASP.NET vytvořené v databázi IdentityMySQLDatabase.

  5. Uvidíte, že se vytvoří všechny tabulky požadované ASP.NET Identity, jak je znázorněno na následujícím obrázku:

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s dialogovým oknem nástroje My S Q L Workbench Tabulky S P dot NET Identity vytvořené v databázi Identity My S Q L Jsou zvýrazněné v levém dolním rohu.

  6. Zkontrolujte například tabulku aspnetusers , abyste při registraci nových uživatelů zkontrolovali položky.

    [Kliknutím na následující obrázek ho rozbalíte. ] Snímek obrazovky s tabulkou s p net users s položkami zobrazující sloupce I D, User Name, Password Hash, Security Stamp a Discriminator