MVCでEntity Frameworkを用いたメソッドベースのクエリー学習ノート(一)

20290 ワード

EFにおけるメソッドベースのクエリ方式はLINQと従来のADOとは異なる.NET、だからこそ、深く勉強する必要があります.余談は多くありませんが、今からMVCプロジェクトを始め、プロジェクトで臨床学習をします.
MVCプロジェクトの作成
1.「ファイル」-「新規プロジェクト」-「テンプレート」-「Web」-「ASP.NET MVC 4アプリケーション」で、GuestBookというプロジェクト名のMVC 4プロジェクトを作成する
2.ファイルディレクトリの中Modelsディレクトリに2つのModelクラスを新規作成
Book.cs:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.ComponentModel;

using System.ComponentModel.DataAnnotations;



namespace GuestBook.Models

{

    [DisplayName("   ")]

    public class Book

    {

        [Key]

        public int Id { get; set; }



        [DisplayName("  ")]

        [Required(ErrorMessage = "          ")]

        [MaxLength(250, ErrorMessage = "      250   ")]

        public string Body { get; set; }



        [DisplayName("  ")]

        [Required]

        public DateTime PublishOn { get; set; }



        [Required]

        public virtual User User { get; set; }

    }

}

User.cs:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.ComponentModel;

using System.ComponentModel.DataAnnotations;



namespace GuestBook.Models

{

    [DisplayName("  ")]

    [DisplayColumn("Name")]

    public class User

    {

        [Key]

        public int Id { get; set; }



        [DisplayName("   ")]

        [Required(ErrorMessage = "     Email  ")]

        [Description("      Email          ")]

        [MaxLength(250, ErrorMessage = "      250   ")]

        [DataType(DataType.EmailAddress)]

        public string Email { get; set; }



        [DisplayName("  ")]

        [Required(ErrorMessage = "        ")]

        [Description("         ")]

        [MaxLength(40, ErrorMessage = "      40   ")]

        [DataType(DataType.Password)]

        public string PassWord { get; set; }



        [DisplayName("  ")]

        [Required(ErrorMessage = "         ")]

        [Description("")]

        [MaxLength(10, ErrorMessage = "        10   ")]

        public string Name { get; set; }



        [DisplayName("   ")]

        [Required(ErrorMessage = "         ")]

        [Description("              ")]

        [MaxLength(18, ErrorMessage = "       18   ")]

        [DataType(DataType.Password)]

        public string PeopleID { get; set; }



        [DisplayName("    ")]

        [Required]

        public DateTime RegisterOn { get; set; }



        public virtual ICollection<Book> Books { get; set; }

    }

}

 
3.データコンテキストクラスの作成
MVCGuestBookContext.cs:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Data.Entity;//



namespace GuestBook.Models

{

    public class MVCGuestBookContext : DbContext

    {

        public MVCGuestBookContext()

            : base("name=DefaultConnection")

        {

        }



        public DbSet<User> Users { get; set; }

        public DbSet<Book> Books { get; set; }

    }

}

 
4.コントローラの作成
HomeController.cs:
using System;

using System.Collections.Generic;

using System.Data;

using System.Data.Entity;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using GuestBook.Models;



namespace GuestBook.Controllers

{

    public class HomeController : Controller

    {

        private MVCGuestBookContext db = new MVCGuestBookContext();



        public ActionResult Index()

        {

            var data = db.Books.ToList();

            return View(data);

        }

    }

}

 
5.右クリックIndexこのアクション(Action)右クリックメニュー「ビューを追加」ポップアップダイアログボックスで「ビューエンジン」をクリックしRazorを選択し、「モデルクラス」を選択して先ほど作成したBookを選択し、「ブラケットテンプレート」を選択リストを選択してビューを作成し、
ディレクトリを展開するビューにはホームコントローラに基づいて作成するフォルダホームが表示され、フォルダの下にIndexが表示されます.cshtmlファイル.次のように定義されます.
@model IEnumerable<GuestBook.Models.Book>



@{

    ViewBag.Title = "Index";

}



<h2>Index</h2>



<p>

    @Html.ActionLink("Create New", "Create")

</p>

<table>

    <tr>

        <th>

            @Html.DisplayNameFor(model => model.Body)

        </th>

        <th>

            @Html.DisplayNameFor(model => model.PublishOn)

        </th>

        <th></th>

    </tr>



@foreach (var item in Model) {

    <tr>

        <td>

            @Html.DisplayFor(modelItem => item.Body)

        </td>

        <td>

            @Html.DisplayFor(modelItem => item.PublishOn)

        </td>

        <td>

            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |

            @Html.ActionLink("Details", "Details", new { id=item.Id }) |

            @Html.ActionLink("Delete", "Delete", new { id=item.Id })

        </td>

    </tr>

}



</table>

このファイルの詳細な構文は、後述する章で説明されますが、このファイルは標準的なHtmlファイルではないようです.これは、ビューの作成時にレイアウトまたはマスターページの使用(Use Layout or Master Page)にチェックマークを付けてデフォルトのマスターメカニズムを使用したためです.
MVCではマスターページのようなメカニズムを使用しています.ViewStart.cshtmlファイルには、次の定義が表示されます.
@{

    Layout = "~/Views/Shared/_Layout.cshtml";

}

この定義はデフォルトのマスターを指し、MVCでは、そのマスターを使用することを個別に指定していない場合にデフォルトでこのマスターページが使用されます.このマスターページを開きます~/Views/Shared/Layout.cshtml
は、すべてのHTMLマザーボードコードが次のように表示されます.
<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8" />

    <meta name="viewport" content="width=device-width" />

    <title>@ViewBag.Title</title>

    @Styles.Render("~/Content/css")

    @Scripts.Render("~/bundles/modernizr")

</head>

<body>

    @RenderBody()



    @Scripts.Render("~/bundles/jquery")

    @RenderSection("scripts", required: false)

</body>

</html>

このマザーボードページでは、@RenderBody()のような方法を定義して、コンテンツページを記入するために使用されています.従来のように、私たちが望む方法に変更することができます.次に、プログラムを実行します.デフォルトでは、システムが作成した標準リストページが表示されます.
余談:もしかすると、あなたは発生したウェブサイトに迷っているかもしれませんが、MVCのウェブサイトのルートを熟知していると、これは分かります.もちろん、これらは私が言った重点ではありません.重点の内容は次の節に現れます.また、以上のようなコンストラクションプログラムでは、Entity FrameworkのCodeFirst開発方式を使用しており、実行に成功すると自動的にデータベースが生成され、詳細はMVCチュートリアルを参照してください.