WebサイトをWindowsAzure上に構築するため、VisualStudio系のインフラを採用する。あとは何で作るか?
・ASP.NET5
クロスプラットフォーム
・SilverLight
クロスブラウザサポート。Windows10Edgeのサポートなし
・WPF,WinForm
Windowsシリーズ.NETFrameworkが必要
机上であれやこれやと想像しても埒があかないので、実際に触れてみることに。
2015年7月にリリースされたVisualStudio2015、ASP.NET5がどんな動きをするのか?遊んでみました。
目的
MSDNのサイトにあるTodoListサンプルサイトを作る。
ターゲット
VisualStudio2015
.NETFramework4.5.1
MVC6
1.プロジェクトの作成
2.DB接続の設定
3.動作確認
4.ソース編集
5.TodoListテーブル作成
6.EntityFramework7.0のマイグレーション
7.動作確認
1.プロジェクトの作成
プロジェクト:ASP.NET Webアプリケーション
ASP.NET5テンプレート:WebApplication
※.NETFrameworkを4.6に指定したがASP.NET5.0は4.5.1にしか対応していない。
だから、project.jsonはDNX451。
Coreは対象としないので、project.jsonの"frameworks"からdnxcore50削除。
"frameworks": {
"dnx451": {}
},
2.DB接続の設定
config.jsonにあるDB接続を以下の設定とする。
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=.\\SQLEXPRESS;Database=aspnet5-TodoList;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
3.動作確認
ここまで至って簡単な作業にも関わらず。以下のエラーで動かず。
The current runtime target framework is not compatible with 'TodoList'.
Current runtime Target Framework: 'DNX,Version=v4.5 (dnx45)'
Type: CLR
Architecture: x86
Version: 1.0.0-beta6-12256
Please make sure the runtime matches a framework specified in project.json
VS2015をインストール後に、dnvx,dnx周りを触っていたからか?
ひとまずDNXに関するフォルダ%USERPROFILE%\.dnxフォルダや環境変数を削除
その後、VS2015再起動し実行したら動作した。
4.ソース編集
サンプルソース、チャートリアルは以下のサイトから
http://www.asp.net/vnext/overview/aspnet-vnext/vc
IdentitiyModels.cs編集後に実行し、エラーとなればOK!
5.TodoListテーブル作成
ApplicationDbContextModelSnapshot.csサイトに以下のコードを追記
builder.Entity("TodoList.Models.TodoItem", b =>
{
b.Property<int>("Id")
.GenerateValuesOnAdd();
b.Property<bool>("IsDone");
b.Property<int>("Priority");
b.Property<string>("Title");
b.Key("Id");
});
と書いてある。まずここでGenerateValuesがエラーとなる。
周りのコードを見るとGenerateValue、sがない。
sだけ削除したらうまくいった。
6.EntityFramework7.0のマイグレーション
ここからが本題。
まずはEntityFrameworkにはテーブルを作成してからプログラムコードを書くのではなく。
プログラムコードを書きテーブルを作成するという考え方「コードファースト」がある。
プログラムの更新、つまりバージョン毎に異なるテーブル構造を比較し、差分のみバージョンアップしてくれるのがイグレーション。
マイグレーション用コマンドを管理者のコマンドラインから実行するが・・
dnx . efdnxなんてない!と怒られる。
where dnx確かにない!
したがってdnvmをコマンドラインからアップグレード
dnvm upgrade where dnxようやく出現
C:\Users\%USERPROFILE%\.dnx\runtimes\dnx-clr-win-x86.1.0.0-beta6\bin\dnx.exe
いける!
dnx . efやっぱりダメ、エラー内容見るとどうやらtry dnu restore
指示通りに
dnu restore cd "Webソリューションフォルダ" dnx . web migration add newTodoList dnx . web migration apply
ローカルDBを確認すると、TodoListテーブルができてます。
7.動作確認
ここでVS2015に戻り、再度コンパイルすると。
なぜか参照設定がないと約2000個のエラーが発生。
dnu restoreの際に project.lock.jsonファイルが書き換わっている。
書き換わっている箇所を見ると参照の順番が異なるだけで、参照そのものは変わっていない。
#それでもだめなの?
思い切ってproject.lock.jsonを削除しVS2015を再起動。
project.lock.jsonをVS2015が再作成し、コンパイルエラー回避!
というわけで、再実行し追加したTodoListが無事動きました。
おまけ
作業の途中で削除した環境変数を確認すると復活してました。
VS2015もしくはdnvm upgradeが追加したのかな?
感想、やっぱりASP.NETは閲覧専用だな!データ登録用のサイトには向いとらん!
0 件のコメント:
コメントを投稿