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 のみ変更します。
<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 を登録します。
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 に修正します。
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 の継承クラスを作成してキーの長さを変更します。
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 で開発環境構築的更多相关文章
- IOSアプリケーション開発環境の構築
IOSアプリケーション開発環境の要求 1) IOSシステムの構造はそのようになっています: 2) ハードウエアの方の要求: コンピューター a) デュアルコアCPU b) 8 gメモリ(開 ...
- 【MYSQL】MYSQLの環境構築
ダウンロード:https://dev.mysql.com/downloads/mysql/ 手順① 手順② mysql.iniの設定について [mysql]default-character-set= ...
- 【Spring】Spring3+Spring3MVCの環境構築(中)
参考URL: https://www.cnblogs.com/lnsylt/p/10258457.html ■目録 ■環境設定 ①pom.xml <?xml version="1.0& ...
- 【Nodejs】Nodejsの環境構築
参考URL:http://www.runoob.com/nodejs/nodejs-install-setup.html Windowにインストールする方法を紹介します. ▲ダウンロードURL:htt ...
- 【Nodejs】Node.js(Express)の環境構築
[Express]の環境 参考URL:http://expressjs.com/en/starter/generator.html ①Node.jsの準備 (参考URL:https://www.cnb ...
- 【Spring】SpringMVCの環境構築(簡)(Version3.1)
■Mavenでプロジェクトの新規 ■プロジェクトのイメージ ■必要なラブリア ■ソース ①pom.xml <?xml version="1.0" encoding=" ...
- 安裝 Rails 開發環境
安裝 Rails 開發環境 Give someone a program, you frustrate them for a day; teach them how to program, you f ...
- 免安裝、免設定的 Hadoop 開發環境 - cloudera 的 QuickStart VM
cloudera 的 QuickStart VM,為一種免安裝.免設定 Linux 及 Hadoop,已幫你建好 CDH 5.x.Hadoop.Eclipse 的一個虛擬機環境.下載後解壓縮,可直接以 ...
- vue開發環境搭建
npm(node package manager),nodejs的包管理器,用於nodejs插件的安裝.卸載和管理依賴. 安裝npm: 檢查npm是否安裝成功及版本:npm -v 卸載npm: 更新n ...
随机推荐
- Daily Scrum - 11/23
今天更新blog时发现了老师对我们daily scrum提的要求,从明天起除了简要记录组会的主要内容之外,还会总结上一个工作日每个组员的工作进度.代码提交情况和燃尽图. 今天会议内容主要是人千.章玮同 ...
- vmEsxi一些使用
打开esxi的shell:在故障检查选项中 回车,打开shell ALT+F1进入esxi的shell ALT+F2返回 精简置备--用多少占多少,上限为设置的磁盘大小 虚机扩容:1.原本的扩容2.添 ...
- Mysql存储引擎federated
Mysql数据库存储引擎federated(联盟) 意思就是把两个不同区域的数据库联系起来,以致可以访问在远程数据库的表中的数据,而不是本地的表.->专门针对远程数据库的实现->一般情况下 ...
- [转帖]Application Request Route实现IIS Server Farms集群负载详解
Application Request Route实现IIS Server Farms集群负载详解 https://www.cnblogs.com/knowledgesea/p/5099893.ht ...
- python设计模式-单例模式
单例模式应用场景 代码的设计模式共有25种,设计模式其实是代码无关的.其目的是基于OOP的思想,不同应用场景应用不同的设计模式,从而达到简化代码.利于扩展.提示性能等目的.本文简述Python实现的单 ...
- SVN for Mac
SVN for Mac https://www.wikihow.com/Install-Subversion-on-Mac-OS-X https://subversion.apache.org/pac ...
- css命名管理混乱?不妨试试BEM
css的缺陷 我们知道,css使用中一个比较令人烦恼的问题,就是css没有作用域可言,我们写了一个组件或者模块之后,往往希望它们可以四处复用,但是由于css没有作用域,我们给样式命名的时候都会非常小心 ...
- Java 工厂方法模式
在工厂对象上调用创建方法,生成接口的某个实现的对象 通过这种方式,接口与实现分离 方法接口 /** * 方法接口 */ public interface Service { void method1( ...
- 学习《Unix/Linux编程实践教程》(1):Unix 系统编程概述
0.目录 1.概念 2.系统资源 3.学习方法 4.从用户的角度来理解 Unix 4.1 登录--运行程序--注销 4.2 目录操作 4.3 文件操作 5.从系统的角度来理解 Unix 5.1 网络桥 ...
- 详细理解servlet实现的三种方式和生命周期
阅读目录 开发servlet的三种方式 理解实现servlet接口的方式,理解servlet生命周期 Servlet接口有五个方法 继承GenericServlet 继承HttpServlet 现在很 ...