#author("2017-11-02T14:35:10+00:00","default:admin","admin") -[[ASP.NET MVC Core 1.0 の基本的な使い方:https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10-part3/]] -[[ASP.NET Core - ASP.NET Core MVC 向け機能スライス:https://msdn.microsoft.com/ja-jp/magazine/mt763233.aspx]] -[[『ASP.NET MVCプログラミング入門』を読んだ:https://ryo511.info/archives/3946]] -[[Visual Studio 2017 による ASP.NET Core MVC 開発:https://qiita.com/hiromasa-masuda/items/5b9ff175aac3d1ef6ca6]] -ブラウザからのリクエストは、URL で指定されたコントローラクラスのアクションメソッドで処理される --例えば、ブラウザから http://xxx.xxx.xxx/Sample01/GetAuthors/ という URL を呼び出すと、Sample01Controller.cs というクラスの、GetAuthors() というメソッドが呼び出される ---第一引数でコントローラクラス名を指定し、第二引数でアクションメソッド名を指定 --このメソッドの中では、ビジネスロジッククラスやデータアクセスクラスを呼び出してデータベースからデータを取り出したり、処理結果をビューに引き渡したりする。 -クライアントに送り返す HTML データは、対応するビューファイル(.cshtml ファイル)により作成される。 --コントローラクラスからデータを受け取り、それを使って、クライアントに送り返す HTML ページを作成する。 -ASP.NET MVC では、モデルに相当するものが何であるのかは決まっていない --”MVC” = Model + View + Controller という名前がついているものの、ASP.NET MVC において明確に扱いが決まっているのは Controller と View のみであり、Model が何であるのかの定義はない --一般的には、以下のうちのいずれか(または複数)が Model に相当 ---データベースとやり取りされるデータの構造(=EF のデータモデル) ---ビューに対して引き渡すデータの構造(=ビューモデル) ---クライアントから送られてくるデータの構造(=リクエストパラメータバインディングのモデル) **[[Entity Framework Core:https://docs.microsoft.com/en-us/ef/core/]] [#zf6ac0e7] -[[Entity Framework Core 1.0 の基本的な使い方:https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10-part2/]] -[[新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~:https://docs.com/decode2016/9570/dev-003-entity-framework-core-1-0]] -[[「Entity Framework Coreを使ってみる」 公開用:https://www.slideshare.net/esmsec/entity-framework-core]] -[[Entity Framework Core 1.0 で SQLite を使ってみる:http://gooner.hateblo.jp/entry/2016/03/04/071400]] -[[データ ポイント - EF Core 1.1: お気に入りをいくつか:https://msdn.microsoft.com/ja-jp/magazine/mt745093.aspx]] -[[.NET Core(Entity Framework Core)でCode Firstする:http://ryuichi111std.hatenablog.com/entry/2016/11/08/023809]] -従来の Entity Framework と異なり、EF Core では O/R マッパーファイル(*.dbml)を使うことができない -このため、O/R マッピング(データベーステーブルのどこを構造体クラスのどこにマッピングするのか?)はすべてコードで指定する必要がある -ツールを利用して自動生成させることも(ある程度は)可能ですが、現時点(2016/07/02)では、手で書いてしまったほうがやりやすい ***Code First [#qc92d1d8] -今後はこれが主流 -ソフトウェアを開発するにあたり、「リレーショナルデータベース設計ありき」ではなくて「作成するソフトウェアの”ドメイン領域の分析”に注力し、データベースはモデルのあるタイミングにおけるシリアライズ結果を保存する入れ物」的な考え方が基本となっている -リレーショナルデータベースとドメインオブジェクトは、その概念の相違から「インピーダンス・ミスマッチ」が発生することは必然であり、ソフトウェア側の人間としては、ドメイン領域のオブジェクトモデリングに集中すべき、という思想 ***Database First [#r9775169] ***Model First [#h8e57f6f] ***使い方 [#rf17b83d] -以下のNuGetパッケージをインストール(DBにSQLiteを使う場合) $ dotnet add package Microsoft.EntityFrameworkCore $ dotnet add package Microsoft.EntityFrameworkCore.Tools $ dotnet add package Microsoft.EntityFrameworkCore.Sqlite $ dotnet add package Microsoft.EntityFrameworkCore.Sqlite.Design -[プロジェクト名].csproj に以下を追記 &color(red){<= これをやらないと「dotnet ef」コマンドが使えない}; <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" /> </ItemGroup> -プロジェクトフォルダにて以下を実行 $ dotnet restore -DBスキーマ構築・更新 $ dotnet ef migrations add Initial $ dotnet ef database update --上記「Initial」の記述は何でもよい **プロジェクトのファイル構成 [#ecd22865] -[[ASP.NET Core - ASP.NET Core MVC 向け機能スライス:https://msdn.microsoft.com/ja-jp/magazine/mt763233.aspx]] -[[ASP.NET Core MVCサンプルの構成:http://autodidact.hatenablog.com/entry/2017/04/11/204541]] -[[ASP.NET Core モジュール構成の参照:https://docs.microsoft.com/ja-jp/aspnet/core/hosting/aspnet-core-module]] -[プロジェクト名].csproj --プロジェクトで使用するライブラリとバージョンを管理 -Program.cs ファイル --Main() 関数が書かれており、Web サーバを起動するためのコードが書かれている -Startup.cs ファイル --ASP.NET ランタイムの初期化コードが書かれている -wwwroot フォルダ ... 公開する静的コンテンツ(HTML ファイルや JPEG ファイルなど)を置く -Models フォルダ ... -Conrtoller フォルダ ... -App_Data フォルダ ... データベースファイルを置くフォルダ。名前は App_Data でなくてもよい(昔の名残) **ライブラリ [#r6f1c4bc] -Microsoft.AspNetCore.Mvc ASP.NET Core MVC 1.0 本体 -Microsoft.AspNetCore.Mvc.TagHelpers View ページの作成でタグヘルパーを使えるようにする -Microsoft.AspNetCore.StaticFiles 静的ファイルを返せるようにするライブラリ -Microsoft.EntityFrameworkCore データアクセスライブラリ Entity Framework Core 1.0 -Microsoft.EntityFrameworkCore.SqlServer Entity Framework Core の SQL Server 接続ドライバ