MVC5と魂力

日々....

このWebでは余りMVC5について書いていませんが、MVC5もよく使います。
元々Windows Formアプリを書く事が多いのですが、Web版をくれ~とリクエストが。

MVC5を始めた頃はMVC2とかMVC3をFreeBSD mono で遊んでいましたが、どうにもならない
ことが判明したのでWindows Serverで動くMVC4に移行しました。
ところがです、MySQL に Entity Framework(EF)を使おうとすると、EF6を使うことになります。
しかも、EF6を使うには MVC5が必須ということで、仕方無くMVC5になります。
今となっては、無駄な時間を使わずにMVC5にして良かったと思います。

初めてMVC5で書くときは、魂が吸い取られる思いがしました。当時は資料も書籍も殆どなくMSの本だけでした。

EFはコードファースト主体の解説が多いので、現実とのマッピングが理解を妨げました。特にモデルの書き方なんかが素人の私には厳しかった。

DBのテーブル名に対してテーブル名の複数形の名前でアクセスするあたりが、いやはや。今まであるテーブルはどうするのや?

モデルでは DbContext を使ってORマッピングしてDataAnnotationsを使って実テーブル
とマッピングすれば、現状のDBをそのまま使えます。

[csharp title=”モデル”]

using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Net.Models
{
public class TargetContext : DbContext
{
public DbSet<Todo> ZTODOs { get; set; }

public DbSet<emp> emps { get; set; }

}

[Table("ZTODO")]
public class Todo
{
[Key]
[Display(Name = "番号")]
public int id { get; set; }
:
:
}
}

[/csharp]

のようにマッピングでき、カラム名に日本語も使えます。通常MySQLでは日本語のカラム名は使いませんから、Dictionary 等で置き換えますが、MVC5ではDisplayで置き換えるだけで済みます。Display以外にも入力値のバリテーションとか

モデルができたら一度ビルドします。モデルの変更の都度ビルドが必要です。

後はコントローラーを書いて Scaffold すれば、 Viewまで一気に書けます。
もちろん上の例のように一つのモデルに複数のテーブルを書けます。

View は Scaffoldした時のコントローラーのメソッドにゲットするかプットします。
コントローラーでは、LINQを使ってオブジェクトを生成し、Listに渡して Viewに表示します。またViewで表示した結果をグラフにする場合も、Viewからメソッドを呼び出してListのまま Chart()に渡したりします。Chartヘルパーではなく、DataVisualization.ChartingにあるChart()を使います。なので、

[csharp title=”追加”]
using System.IO;
using System.Drawing;
using System.Web.UI.DataVisualization.Charting;

[/csharp]

が必要です。

LINQ は赤間さんの LINQ テクノロジ入門が一番役にたちました。
当初は、SQLで書いた方が早いと思っていましたが、次第にLINQのみで考えるようになってしまいました。特に拡張メソッドはよく使います。

コメント

タイトルとURLをコピーしました