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 テーブルが更新されることが確認できます。

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

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

    IOSアプリケーション開発環境の要求 1) IOSシステムの構造はそのようになっています: 2) ハードウエアの方の要求: コンピューター a)    デュアルコアCPU b)    8 gメモリ(開 ...

  2. 【MYSQL】MYSQLの環境構築

    ダウンロード:https://dev.mysql.com/downloads/mysql/ 手順① 手順② mysql.iniの設定について [mysql]default-character-set= ...

  3. 【Spring】Spring3+Spring3MVCの環境構築(中)

    参考URL: https://www.cnblogs.com/lnsylt/p/10258457.html ■目録 ■環境設定 ①pom.xml <?xml version="1.0& ...

  4. 【Nodejs】Nodejsの環境構築

    参考URL:http://www.runoob.com/nodejs/nodejs-install-setup.html Windowにインストールする方法を紹介します. ▲ダウンロードURL:htt ...

  5. 【Nodejs】Node.js(Express)の環境構築

    [Express]の環境 参考URL:http://expressjs.com/en/starter/generator.html ①Node.jsの準備 (参考URL:https://www.cnb ...

  6. 【Spring】SpringMVCの環境構築(簡)(Version3.1)

    ■Mavenでプロジェクトの新規 ■プロジェクトのイメージ ■必要なラブリア ■ソース ①pom.xml <?xml version="1.0" encoding=" ...

  7. 安裝 Rails 開發環境

    安裝 Rails 開發環境 Give someone a program, you frustrate them for a day; teach them how to program, you f ...

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

    cloudera 的 QuickStart VM,為一種免安裝.免設定 Linux 及 Hadoop,已幫你建好 CDH 5.x.Hadoop.Eclipse 的一個虛擬機環境.下載後解壓縮,可直接以 ...

  9. vue開發環境搭建

    npm(node package manager),nodejs的包管理器,用於nodejs插件的安裝.卸載和管理依賴. 安裝npm: 檢查npm是否安裝成功及版本:npm -v 卸載npm: 更新n ...

随机推荐

  1. Beta阶段冲刺-6

    一. 每日会议 1. 照片 2. 昨日完成工作 3. 今日完成工作 4. 工作中遇到的困难 杨晨露:各种问题,虽然都是开发上面的问题,但是都提出来就有点头大了. 戴志斌:对小程序公众号的开发不了解,因 ...

  2. JAVA面对对象(二)——继承、方法的覆写

    1.继承就是基于已存在的类构造一个新类,继承已存在的类就能复用类的方法和属性,并且能够添加新的方法和属性.也就是子类和父类 2.一个父类可以拥有多个子类,一个子类只允许有一个父类 3.用extends ...

  3. springboot项目的创建

    创建springboot项目 包名和项目名 选择需要使用的框架,web 然后再点击下一步,完成即可创建springboot项目

  4. [Cyan之旅]使用NPOI实现Excel的导入导出,踩坑若干.

    Cyan是博主[Soar360]自2014年以来开始编写整理的工具组件,用于解决现实工作中常用且与业务逻辑无关的问题. 什么是NPOI? NPOI 是 POI 项目的 .NET 版本.POI是一个开源 ...

  5. ELK Stack (2) —— ELK + Redis收集Nginx日志

    ELK Stack (2) -- ELK + Redis收集Nginx日志 摘要 使用Elasticsearch.Logstash.Kibana与Redis(作为缓冲区)对Nginx日志进行收集 版本 ...

  6. [转帖]ESXi 网卡绑定 增加吞吐量的方法

    VMware ESX 5.0 网卡负载均衡配置3种方法 http://blog.chinaunix.net/uid-186064-id-3984942.html (1) 基于端口的负载均衡 (Rout ...

  7. Zoom 会议系统

    Jfrog的培训过程中 发现ppt的效果很不理想  讲师使用zoom的方式效果很好 首先说一下 zoom的定价体系 官网信息: https://www.zoom.us/profile 好像必须使用 企 ...

  8. js & parseFloat & toFixed

    js & parseFloat & toFixed https://repl.it/languages/javascript https://repl.it/repls/MintyBa ...

  9. ubuntu系统创建新用户并赋予sudo权限

    1.创建新用户 创建新用户有两种方式:adduser和useradd adduser会为用户创建組./home目录下同名文件夹,密码,而useradd不会 因此推荐使用adduser创建用户,例: s ...

  10. Cuba项目从远程Git仓库下载步骤

    Cuba Studio 从Git远程仓库里下载代码,并且可以使用IDEA打开,需要注意的地方: 1.使用Git Gui克隆代码 也可以使用IDEA本身集成的Git下载,但是要保证:下载了项目以后,不能 ...