2016年8月31日水曜日

「ASP.NET MVC5 実践プログラミング」 VBでコーディング(Chapter1~3)

「ASP.NET MVC5 実践プログラミング」 (山田祥寛 著 秀和システム)を学習中。
C#での開発経験がないため、C#のコードをVBに置き換えながらテキストを読み進めた。
VBのコードのメモを残す。

以下のサイトを参考にさせていただきました。



Chapter1 イントロダクション

概要や、環境構築の説明部分。
テキストではVisual Studio 2013 Expressを用いているが、こちらではVisual Studio 2015 Communityをインストールした。


Chapter2 ASP.NET MVCの基本

※プロジェクトの参照設定の「インポートされた名前空間」にSystem.Data.Entityを追加しておくこと

リスト2-1 Controllers/BeginController.vb

Option Strict Off

Namespace Controllers
    Public Class BeginController
        Inherits Controller

        ' GET: Begin
        Function Index() As ActionResult
            Return Content("こんにちは、世界!")
        End Function

    End Class
End Namespace

リスト2-4 Controllers/BeginController.vb

Option Strict Off

Namespace Controllers
    Public Class BeginController
        Inherits Controller
...中略...

        Function Show() As ActionResult
            ViewBag.Message = "こんにちは、世界!"
            Return View()
        End Function

    End Class
End Namespace

リスト2-5 Views/Begin/Show.vbhtml

@Code
    ViewData("Title") = "Show"
End Code

<h2>Show</h2>

<p>@ViewBag.Message</p>

リスト2-7 Models/Member.vb

Public Class Member
    Public Property Id As Integer
    Public Property Name As String
    Public Property Email As String
    Public Property Birth As DateTime
    Public Property Married As Boolean
    Public Property Memo As String
End Class

リスト2-8 Models/MvcBasicContext.vb

Public Class MvcBasicContext
    Inherits DbContext
    Public Property Members As DbSet(Of Member)
End Class

リスト2-9 Web.config

  <connectionStrings>
    ...中略...
    <add name="MvcBasicContext" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\MvcBasic.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

リスト2-10 Models/MvcBasicInitializer.vb

Public Class MvcBasicInitializer
    Inherits DropCreateDatabaseAlways(Of MvcBasicContext)

    Protected Overrides Sub Seed(context As MvcBasicContext)

        Dim members As New List(Of Member) _
            From {
            New Member() With {
                .Name = "山田太郎",
                .Email = "yamada@example.com",
                .Birth = DateTime.Parse("1970-04-01"),
                .Married = False,
                .Memo = "メモ欄です。"
            },
            New Member() With {
                .Name = "佐藤花子",
                .Email = "sato@example.com",
                .Birth = DateTime.Parse("1972-12-12"),
                .Married = False,
                .Memo = "備考欄です。"
            }
        }
        members.ForEach(Function(b) context.Members.Add(b))
        context.SaveChanges()
    End Sub

End Class

リスト2-11 Global.asax

Imports System.Web.Optimization

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Protected Sub Application_Start()
        ...中略...
        Database.SetInitializer(Of MvcBasicContext)(New MvcBasicInitializer())
    End Sub
End Class


リスト2-12 Controllers/BeginController.vb

Option Strict Off

Namespace Controllers
    Public Class BeginController
        Inherits Controller

        Private db As New MvcBasicContext

        ...中略...

        Function List() As ActionResult
            Return View(db.Members)
        End Function

    End Class
End Namespace


リスト2-13 Views/Begin/List.vbhtml

@ModelType IEnumerable(Of MvcBasic.Member) 
@Code
    ViewData("Title") = "List"
End Code
<h2>List</h2>
<table class="table">
    <tr>
        <th>氏名</th>
        <th>メールアドレス</th>
        <th>誕生日</th>
        <th>既婚</th>
        <th>備考</th>
    </tr>
    @For Each item In Model
        @<tr>
            <td>@item.Name</td>
            <td>@item.Email</td>
            <td>@item.Birth</td>
            <td>@item.Married</td>
            <td>@item.Memo</td>
        </tr>
    Next
</table>

リスト2-14 Controllers/BeginController.vb

Option Strict Off

Namespace Controllers
    Public Class BeginController
        Inherits Controller

        ...中略...

        Sub New()
            db.Database.Log = Sub(sql) Debug.Write(sql)
        End Sub

        ...中略...

    End Class
End Namespace


2016年8月24日水曜日

ASP.NET MVC5 (VB) + SQLServer 【その1】

ASP.NET MVC5 (VB) + SQLServer 【その1 プロジェクト作成~CRUD生成】

<やりたいこと>
ASP.NET NVC5にて、
・データのメンテナンス機能
・データの帳票出力機能
を作ってみたい。

<本投稿で行うこと>
特定のテーブルのメンテナンス画面を作成(自動生成)する。
いわゆる「コードファースト」のスタイルではなく、すでにテーブルが定義されていて、データも存在するデータベース(SQLServer)を操作する。

<開発環境>
・Visual Studio 2015 Community 2015
・SQLServer2008R2

<手順>
  1. プロジェクトの作成
    新しいプロジェクトを作成「ASP.NET Web アプリケーション」


    「MVC」のテンプレートを選択。Azureへの配置はしない。
  2. モデルを生成
    ソリューションエクスプローラーの「Models」のフォルダを右クリック => 「追加」 => 「新しい項目」 =>「ADO.NET Entity Data Model」を選択



    「データベースからCode First」を選択


    データ接続の選択 「新しい接続」を押す


    データベースの接続情報を入力して「OK」


    作成したデータ接続を選択。重要情報は接続文字列に含めてみた。「次へ」を押す


    対象とするテーブルを選択して「完了」


    モデルが自動生成された。
    ここで一旦ビルドしておく。
  3. CRUD自動生成
    ソリューションエクスプローラーのControllersフォルダを右クリックし「追加」 => 「新規スキャフォールディングアイテム」


    「Entity Framework を使用した、ビューがある MVC 5 コントローラー」を選択


    モデルクラスに先ほど作成したModelの任意のものをチョイス。
    データコンテキストクラスにもModelの項で作成したものをチョイス。
    「追加」を押す。上手くいけば、コントローラーとビューが自動生成されます。
  4. 動作確認
    再生ボタンを押して、プログラムを実行jしブラウザで動作確認します。


    ブラウザにトップページが表示されます。


    先ほど作成したコントローラーのパスを開きます。
    もともと「http://localhost:○○○○○/」と出ていたURLに、コントローラー名(名前の「Controller」の部分を除く)を加え「http://localhost:○○○○○/コントローラー名」を入力します。


    テーブルの一覧が表示されたら成功です。Create、Edit、Details、Deleteが動作することが確認できます。