2015年8月5日水曜日

VisualStudio2015 ASP.NET5 MVC6

あるユーザ様へデータ登録用のWebサイトを提供することになった。ここ6,7年Web開発から遠ざかっていたこともあり、顧客要件を満たし、納期内、予算内の開発を手助けしてくれる開発技術がわからない・・・。

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 . ef
dnxなんてない!と怒られる。
  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 件のコメント:

コメントを投稿