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
Přihlaste se k webu Azure Portal.
Klikněte na NOVÝ v dolní části stránky a pak vyberte STORE:
V průvodci Zvolit doplněk vyberte ClearDB MySQL Database a pak klikněte na šipku Další v dolní části rámce:
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 zaškrtnutí políčka KOUPIT dokončete vytváření databáze.
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. ] )
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:
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:
Otevřete Visual Studio 2103.
Na úvodní stránce klikněte na Nový projekt nebo můžete kliknout na nabídku Soubor a potom na Nový projekt:
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:
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:
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ě.
Otevřete projekt MVC v sadě Visual Studio.
Klikněte na Nástroje, pak klikněte na Správce balíčků NuGet a pak klikněte na Konzola Správce balíčků:
Konzola Správce balíčků se zobrazí v dolní části sady Visual Studio. Zadejte "Update-Package EntityFramework" a stiskněte Enter:
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.]
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.
Otevřete soubor Web.config projektu v Visual Studio 2013.
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>
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>
<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ů:
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(); } } }
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ě:
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(); } } } } }
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ů:
Stisknutím ctrl + F5 sestavte a spusťte webovou aplikaci.
V horní části stránky klikněte na kartu Zaregistrovat :
Zadejte nové uživatelské jméno a heslo a klikněte na Zaregistrovat:
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:
Instalace nástroje MySQL Workbench pro ověření dat
Instalace nástroje MySQL Workbench ze stránky pro stažení MySQL
V průvodci instalací na kartě Výběr funkce vyberte MySQL Workbench v části Aplikace .
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.
Po navázání připojení zkontrolujte tabulky identity ASP.NET vytvořené v databázi IdentityMySQLDatabase.
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:
Zkontrolujte například tabulku aspnetusers , abyste při registraci nových uživatelů zkontrolovali položky.