ASP.NET MVC + MySQL で開発環境構築

from:http://qiita.com/midori44/items/ef7cdd1d37c353e44b5f

ASP.NET MVC & EntityFramework によるコードファースト開発環境を MySQL で構築してみます。
と言っても今回はプロジェクトを作成して ASP.NET Identity によるユーザー認証を MySQL で動かすところまで。

(2015.10.22 追記)
Visual Studio 2015 + .NET Framework 4.6 でも動作確認。
現在 beta 8 が公開中の ASP.NET 5 (ASP.NET MVC 6) は、まだ MySql.Data.Entity が対応していないので MySQL は使用できません。
(追記ここまで)

準備

Visual Studio 2013 Community または Professional 以上を用意。
Express for Web では拡張機能が使えないので注意。

プロジェクト作成

新規作成 -> プロジェクト -> Visual C# -> ASP.NET Webアプリケーション を選択。
.NET Framework 4, 4.5 および 4.5.1 のサポートは 2016年1月12日 に終了するらしいので .NET Framework 4.5.2 を推奨。

テンプレートは MVC を選択して、認証に「個人ユーザーアカウント」を使用。
今回は「単体テストの追加」とAzureの「クラウド内のホスト」のチェックは外しておきます。

これで ASP.NET アプリケーションが新規作成されました。
デバッグ実行すれば、ユーザー登録?ログインといった ASP.NET Identity の認証機能を使用できることが確認できます。

MySQL接続

デフォルトでは SQL Server Compact が使用されているので、接続先を MySQL に変更してみます。

MySql.Data.Entityのインストール?設定

「NuGet パッケージの管理」から MySQL で検索して MySql.Data.Entity をインストールします(2015/4/14時点の最新版は6.9.6)。
ついでに Microsoft ASP.NET MVC と EntityFramework も最新版にアップデートしておきます。

次に Web.config を開きます(Viewsディレクトリ内の Web.config ではなくプロジェクト直下のほう)。
entityFramework および system.data の設定は MySql.Data.Entity のインストール時に自動で追加されているので、connectionStrings のみ変更します。

Web.config

<connectionStrings>
    <!-- <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-webapp-****.mdf;Initial Catalog=aspnet-webapp-****.;Integrated Security=True" providerName="System.Data.SqlClient" /> -->
    <add name="DefaultConnection" connectionString="server=127.0.0.1;port=3306;database=test;uid=root;password=;charset=utf8" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

ここではXAMPP上で初期設定の MySQL を想定していますので、接続文字列のパラメータは環境に合わせて変更してください。

マイグレーション

続いて、マイグレーションを実行して認証で使用されるテーブルをコードから自動生成します。

Enable-Migrations

「パッケージマネージャー コンソール」から次のコマンドを実行します。
Enable-Migrations

Migration ディレクトリと Configuration.cs ファイルが作成されました。

次に Add-Migration を実行するのですが、このまま実行すると以下のエラーが発生してしまいます。

プロバイダー ‘MySql.Data.MySqlClient‘ で MigrationSqlGenerator が見つかりませんでした。対象の移行構成クラスで SetSqlGenerator メソッドを使用して、追加の SQL ジェネレーターを登録してください。

なので先ほど生成された Configuration.cs に、DbConfiguration の継承クラスを追加して MigrationSqlGenerator を登録します。

Configuration.cs

using MySql.Data.Entity

internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
{
    ...

    public class MysqlConfiguration : DbConfiguration
    {
        public MysqlConfiguration()
        {
            SetMigrationSqlGenerator(MySqlProviderInvariantName.ProviderName, () => new MySqlMigrationSqlGenerator());
        }
    }
}

これで Add-Migration が実行できるようになりました。

Add-Migration

「パッケージマネージャー コンソール」から次のコマンドを実行します。
Add-Migration Initial

Migration ディレクトリ内に 2015****_Initial.cs が作成されました。
このファイルにコードから生成されたテーブルのカラム情報が保存されています。

最後に Update-Database を実行するのですが、このまま実行すると以下のエラーが発生してしまいます。

Specified key was too long; max key length is 767 bytes

これは MySQL ではキーの長さの上限が 255 (utf-8のvarchar型)のためなので、キーとなるカラムの長さを 256 から 255 に修正します。

2015****_Initial.cs

public override void Up()
{
    CreateTable(
        "dbo.AspNetRoles",
        c => new
            {
                Id = c.String(nullable: false, maxLength: 128, storeType: "nvarchar"),
                // maxLength: 256 -> 255
                Name = c.String(nullable: false, maxLength: 255, storeType: "nvarchar"),
            })
        .PrimaryKey(t => t.Id)
        .Index(t => t.Name, unique: true, name: "RoleNameIndex");

    ...

    CreateTable(
        "dbo.AspNetUsers",
        c => new
            {
                Id = c.String(nullable: false, maxLength: 128, storeType: "nvarchar"),
                Email = c.String(maxLength: 256, storeType: "nvarchar"),
                EmailConfirmed = c.Boolean(nullable: false),
                PasswordHash = c.String(unicode: false),
                SecurityStamp = c.String(unicode: false),
                PhoneNumber = c.String(unicode: false),
                PhoneNumberConfirmed = c.Boolean(nullable: false),
                TwoFactorEnabled = c.Boolean(nullable: false),
                LockoutEndDateUtc = c.DateTime(precision: 0),
                LockoutEnabled = c.Boolean(nullable: false),
                AccessFailedCount = c.Int(nullable: false),
                // maxLength: 256 -> 255
                UserName = c.String(nullable: false, maxLength: 255, storeType: "nvarchar"),
            })
        .PrimaryKey(t => t.Id)
        .Index(t => t.UserName, unique: true, name: "UserNameIndex");

    ...
}

もう一箇所、マイグレーション履歴を保持する __migrationhistory テーブルも修正する必要があります。
先ほどの Configuration.cs に HistoryContext の継承クラスを作成してキーの長さを変更します。

Configuration.cs

public class MysqlConfiguration : DbConfiguration
{
    public MysqlConfiguration()
    {
        SetMigrationSqlGenerator(MySqlProviderInvariantName.ProviderName, () => new MySqlMigrationSqlGenerator());

        SetHistoryContext("MySql.Data.MySqlClient", (dbConnection, defaultSchema) => new MysqlHistoryContext(dbConnection, defaultSchema));
    }
    public class MysqlHistoryContext : HistoryContext
    {
        public MysqlHistoryContext(DbConnection dbConnection, string defaultSchema)
            : base(dbConnection, defaultSchema)
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength(255).IsRequired();
            modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength(255).IsRequired();
        }
    }
}

これで Update-Database が実行できるようになりました。

Update-Database

「パッケージマネージャー コンソール」から次のコマンドを実行します。
Update-Database

以上で MySQL にデータベースが生成されます。

デバッグ実行してユーザー登録すれば aspnetusers テーブルが更新されることが確認できます。

时间: 2024-08-28 14:42:55

ASP.NET MVC + MySQL で開発環境構築的相关文章

IOSアプリケーション開発環境の構築

IOSアプリケーション開発環境の要求 1) IOSシステムの構造はそのようになっています: 2) ハードウエアの方の要求: コンピューター a)    デュアルコアCPU b)    8 gメモリ(開発環境は非常にメモリを消耗します) を勧め:mac book pro スマートフォン を勧め:iphone 5+ 3) ソフトウェアの方の要求: OS X 10.9.3+ Xcode 6.0+ iOSアプリ開発は.Xcodeという開発環境上で行います.Xcode上でプログラミング言語を用いてコードを

安裝 Rails 開發環境

安裝 Rails 開發環境 Give someone a program, you frustrate them for a day; teach them how to program, you frustrate them for a lifetime. - David Leinweber https://ihower.tw/rails4/installation.html 在這一章中,我們將介紹如何安裝Ruby on Rails的開發環境.開發Rails的環境需要: Ruby 1.9.3以

免安裝、免設定的 Hadoop 開發環境 - cloudera 的 QuickStart VM

cloudera 的 QuickStart VM,為一種免安裝.免設定 Linux 及 Hadoop,已幫你建好 CDH 5.x.Hadoop.Eclipse 的一個虛擬機環境.下載後解壓縮,可直接以 VirtualBox.VMWare.Docker.KVM 任一虛擬機,開啟 Hadoop 2.x 執行環境,並可用內建本地模式的 Eclipse 開發工具,開發.執行 Hadoop 程式碼. 下載點 :http://www.cloudera.com/downloads.html?productID

想用Java開發GAE, 如何建構開發環境, Part1: 安裝及設定Google Plugin

在雲端的時代若想要用最小的成本, 運用雲端來兼具快速佈署.自動平衡負載.高可用性, 高可塑性, Google App Engine (GAE)似乎是一個符合經濟及效益的雲端PaaS平台. 站在Google巨人的肩膀上, 架設雲端的諸多系統上的問題似乎都可以不用煩惱, 營運及開發人員只要專心把服務及產品做好就可以水到渠成. 由於這個例子以Eclipse Java EE來開發 GAE上的應用程式, 重點將擺在環境的安裝與設定, 並以一個事先寫好的Google Data的測試程式來做最終的結果驗證.

幾個步驟輕鬆在windows操作系統上搭建GO語言開發環境

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

react開發環境搭建

最近接触react框架,小记一下~~~ 开发环境配置 要搭建一个现代的前端开发环境配套的工具有很多,比如 Grunt / Gulp / Webpack / Broccoli,都是要解决前端工程化问题,这个主题很大,这里为了使用 React 我们只关注其中的两个点: JSX 支持 ES6 支持 配合 webpack 非常方便. Webpack 配置 React 开发环境 Webpack 是一个前端资源加载/打包工具,只需要相对简单的配置就可以提供前端工程化需要的各种功能,并且如果有需要它还可以被整

Win 環境構建調試用TreeWalker

語法 var ppTreeWalker = document.createTreeWalker(pRootNode, ulWhatToShow, pFilter, fEntityReferenceExpansion); 參數 pRootNode [in] Type: Node The root element or node to start traversing on. ulWhatToShow [in] Type: Integer The type of nodes or elements

ASP.NET MVC 開發心得分享 (21):Routing 觀念與技巧

ASP.NET MVC 預設在 Global.asax 所定義的 RegisterRoutes 方法中可以輕易的定義你希望擁有的網址格式,嚴格上來講這並非 ASP.NET MVC 的專利,而是從 ASP.NET 3.5 SP1 就加入的新特性,所以就算是傳統的 ASP.NET Web Form 一樣可以利用 Routing 所帶來的好處,今天我就來講一些 Routing 的觀念與技巧. 快速上手 我先解釋在 ASP.NET MVC 專案中 Global.asax 所定義的 Routing 程式碼

Java開發(一)——環境配置

1)安裝JDK 1-下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2-安裝JDK:無限下一步 3-檢測安裝結果:在cmd下使用java命令,不報錯就是安裝成功,如果報錯請卸載JDK重裝,并清理註冊表 2)配置環境變量 1-搜索“環境變量” 2-進入“環境變量” 3-新建“JAVA_HOME”變量:變量名是JAVA_HOME,變量值是JDK安裝路徑..\JDK 4-新建“Path”變量:變量名是Pat