Try .NET Core

.NET Coreを動かした、試した記録を書き残します。

ASP.NET Coreサンプルアプリ「MusicStore」を動かす

開発環境が一通り整いましたので、実際に開発の方を試したくなります。

テンプレートのコードを眺めると、MVCフレームワークを1つ2つ齧ったことがあれば、ざっくりとした挙動は想像できます。

しかし、もう少し、情報が欲しい。

Web案件では主にPHPで、業務系案件は古臭いWebフォームを扱うばかりだった私は、ASP.NET MVCというMicrosoftご謹製フレームワークについて、全く知識がありません。

なにか手頃な、そこそこ主だった実装があるサンプルコードが無いかと探したら、「MusicStore」というサンプルに行き着きました。

aspnet/MusicStore Sample MusicStore application that uses MVC and Entity Framework.
f:id:try_dot_net_core:20161207220252j:plain

音楽ショップのサンプルということで、ユーザー認証やカート機能など、実践的なコードが読めそうです!
早速ソースを頂いて、Visual Studioで開いてみます。

実行してみる

README.mdに実行の仕方が書いてあるんですが、

If you have Visual Studio 2015
   i. Open MusicStore.sln in Visual Studio 2015 and run the individual applications on IIS Express.

やー。ずいぶん、ざっくりっすね~。
DBの記述が見当たりません。
要らないってことも無いよね、と思いつつ。

パッケージ復元とビルドは、本記事記述時最新の2016年11月24日コミットの状態で、何事もなく通りました。

別環境でパッケージ復元にハマったことがありましたが、その際はNugetパッケージの管理画面でプレリリースを含めるチェックボックスを入れて検索することで、無事にインストール出来ました。
f:id:try_dot_net_core:20161208215916j:plain

README.md上では/src/MusicStore/のパスが散見されるので、これがメインプロジェクトなのでしょう。
f:id:try_dot_net_core:20161208215120j:plain

実行すると。
f:id:try_dot_net_core:20161208220325j:plain
例外ですねー...。

例外を解析する

詳細表示すると、InnerExceptionのStackTraceに発生位置がありました。
f:id:try_dot_net_core:20161208221055j:plain
Models\SampleData.cs:行 26とな。

該当箇所はこんな感じです。
f:id:try_dot_net_core:20161208221854j:plain
EnsureCreateAsyncですって。非同期で確実に生成するぜ、と。
その後に続くロジックが、InsertTestDataCreateAdminUserとのことですんで、どうやらDBインスタンスを新規作成してるようですね。

なにか設定ファイルにヒントが無いかと、プロジェクト内をみてみます。
config.jsonというファイルに、DBの接続文字列っぽいのがありました。
f:id:try_dot_net_core:20161208222324j:plain

中身はこちら

{
  "AppSettings": {
    "SiteTitle": "ASP.NET MVC Music Store",
    "CacheDbResults": true
  },
  "DefaultAdminUsername": "Administrator@test.com",
  "DefaultAdminPassword": "YouShouldChangeThisPassword1!",
  "Data": {
    "DefaultConnection": {
      // Use a shared (and running) LocalDB database when executing in IIS e.g.
      // "Server=(localdb)\\.\\IIS_DB;Database=MusicStore;Trusted_Connection=False;MultipleActiveResultSets=true;User ID=iis_login;Password=********"
      "ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=MusicStore;Trusted_Connection=True;MultipleActiveResultSets=true;Connect Timeout=30;"
    }
  }
}

どうも、ローカルのSQL Server上のMusicStoreというインスタンスに繋ごうとしてる?
お望みどおり(?)、SQL Serverを起動して、MusicStoreインスタンスを作ります。
インスタンスだけの状態で、テーブルもデータも空っぽです。
f:id:try_dot_net_core:20161208223001j:plain

config.jsonの接続文字列を書き換えて、ローカルSQL Serverに繋がるようにします。

{
  "AppSettings": {
    "SiteTitle": "ASP.NET MVC Music Store",
    "CacheDbResults": true
  },
  "DefaultAdminUsername": "Administrator@test.com",
  "DefaultAdminPassword": "YouShouldChangeThisPassword1!",
  "Data": {
    "DefaultConnection": {
      // Use a shared (and running) LocalDB database when executing in IIS e.g.
      // "Server=(localdb)\\.\\IIS_DB;Database=MusicStore;Trusted_Connection=False;MultipleActiveResultSets=true;User ID=iis_login;Password=********"
      "ConnectionString": "Server=localhost;Database=MusicStore;Trusted_Connection=True;MultipleActiveResultSets=true;Connect Timeout=30;User ID=[ユーザーID];Password=[パスワード]"
    }
  }
}

jsonなのに、コメントアウト出来るんですね。
便利だけど、いいのかなMSさん...(困惑)

無事に動いた!

あらためて、Visual Studioから実行すると... f:id:try_dot_net_core:20161208223959j:plain
きました!
トップにMen at Workを持ってくるあたり、趣味が合いそうです。

ユーザー登録やログイン、カート処理など、一通り動くようです。
f:id:try_dot_net_core:20161208224449j:plain

今後はこのソースを研究しようと思います!