Contoso Universityã®Webã¢ããªã±ãŒã·ã§ã³ãäŸã«äœ¿çšããŠãEntity Frameworkã䜿çšããASP.NET MVCã¢ããªã±ãŒã·ã§ã³ã®äœæã瀺ããŸããããã«ã¯ãåŠçã®åè¬ãã³ãŒã¹ã®äœæãæåž«ã®ä»»åœãªã©ã®æ©èœãå«ãŸããŸãã
ãããã®ãã¥ãŒããªã¢ã«ã§ã¯ãContoso Universityã®Webã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã»ã¹ãé ã远ã£ãŠèª¬æããŸãã 宿ããã¢ããªã±ãŒã·ã§ã³ãããŠã³ããŒãããããæå®ãããäžé£ã®æé ã«åŸã£ãŠäœæã§ããŸãã äŸã¯CïŒã§æäŸãããã³ãŒãäŸã¯CïŒããã³VBã§å©çšå¯èœã§ãã ãã¬ãŒãã³ã°è³æã«éæ¥çã«é¢é£ãã質åãããå Žåã¯ã
ASP.NET Entity Frameworkãã©ãŒã©ã ãŸãã¯
Entity Framework and LINQ to Entitiesãã©ãŒã©ã ã«è³ªåã§ããŸãã
åŠç¿ã«ã¯ãVisual Studioã§ASP.NET MVCãæäœããç¥èãå¿
èŠã§ãããã以å€ã®å Žåã¯ã
ASP.NET MVCãã¥ãŒããªã¢ã«ã®åŠç¿ãéå§ããã®ã«é©ããå Žæã§ãã ASP.NET Webãã©ãŒã ã䜿çšããå Žå
ã¯ããEntity Frameworkå
¥éãããã³
ãEntity Frameworkã® ç¶ç¶ããã芧ãã ãã ã
éå§ããåã«ã次ã®ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ããã
ã³ã³ããŒãœå€§åŠ
éçºããŠããã¢ããªã±ãŒã·ã§ã³ã¯ãåçŽãªå€§åŠã®Webãµã€ãã§ãã

ãŠãŒã¶ãŒã¯ãåŠçãã³ãŒã¹ãæåž«ã«é¢ããããŒã¿ã衚瀺ããã³æŽæ°ã§ããŸãã 以äžã«èµ·ããããšã®ããã€ãã®ã¹ã¯ãªãŒã³ã·ã§ããã



UIã¯ããã©ã«ãã®ãã³ãã¬ãŒãã§çæããããã®ãšã¹ã¿ã€ã«ã䌌ãŠãããããEntity Frameworkã®äœ¿çšã«é¢ããåé¡ã«çŠç¹ãåœãŠãããŸãã
Entity Frameworkã䜿çšããéçºã¢ãããŒã
ãã®å³ã«åºã¥ããŠãEntity Frameworkã§ããŒã¿ãæäœããããã®3ã€ã®ã¢ãããŒãããããŸãïŒ
Database First ã
Model First ãããã³
Code Firstã§ãã
æåã®ããŒã¿ããŒã¹
æ¢åã®ããŒã¿ããŒã¹ã®å ŽåãEntity Frameworkã¯ãããŒã¿ããŒã¹ãªããžã§ã¯ãïŒããŒãã«ãåãªã©ïŒã«å¯Ÿå¿ããã¯ã©ã¹ãšããããã£ã§æ§æãããããŒã¿ã¢ãã«ãèªåçã«äœæã§ããŸãã ããŒã¿ããŒã¹æ§é ïŒã¹ãã¢ã¹ããŒãïŒãããŒã¿ã¢ãã«ïŒ
æŠå¿µã¢ãã« ïŒãããã³ãããã®çžäºã®ãããã³ã°ã«é¢ããæ
å ±ã¯ã
.edmxãã¡ã€ã«ã®XMLã«å«ãŸããŠ
ããŸãã Visual Studioã¯ã
.edmxã衚瀺ããã³ç·šéã§ããEntity Frameworkã°ã©ãã£ãã¯ãã¶ã€ããŒãæäŸããŸãã
Entity Frameworkå
¥éãšWeb Formsãããªã¢ã«ã®
Entity FrameworkããŒãã®
ç¶ç¶ã§ã¯ãDatabase Firstã¢ãããŒãã䜿çšããŸãã
æåã®ã¢ãã«
ããŒã¿ããŒã¹ããªãå Žåã¯ãEntity Framework Visual Studioãã¶ã€ããŒã䜿çšããŠããŒã¿ã¢ãã«ãäœæããããšããéå§ã§ããŸãã ã¢ãã«ã®äœæ¥ãçµããåŸããã¶ã€ããŒã¯DDLïŒ
ããŒã¿ å®çŸ© èšèª ïŒã³ãŒããçæããŠããŒã¿ããŒã¹ãäœæããŸãã ãã®ã¢ãããŒãã§ã¯ãã¢ãã«ãšãããã³ã°
æ
å ±ãä¿åããããã«
.edmxã䜿çšãã
ãŸã ã
Entity Framework 4ã®æ°æ©èœã«ã¯ããã®ã¢ãããŒãã䜿çšããå°ããªéçºäŸãå«ãŸããŠããŸãã
ã³ãŒããã¡ãŒã¹ã
ããŒã¿ããŒã¹ã®å¯çšæ§ã«é¢ä¿ãªããããŒã¿ããŒã¹å
ã®ãšã³ãã£ãã£ã«å¯Ÿå¿ããã¯ã©ã¹ãšããããã£ã®ã³ãŒããæåã§èšè¿°ãããã¡ã€ã«ã䜿çšããã«Entity Frameworkã§ãã®ã³ãŒãã䜿çšã§ããŸã
ã edmx ã ãã®ãããå
¬åŒã®ååã¯Code Firstã§ããããã®ã¢ãããŒãã
ã³ãŒã ã®ã¿ãšåŒã°ããæ¹æ³ãèŠãããšãã§ããŸãã ã³ãŒãã§è¡šãããã¹ãã¢ã¹ããŒããšæŠå¿µã¢ãã«éã®ãããã³ã°ã¯ãæ
£äŸããã³ç¹å¥ãªãããã³ã°APIã«ãã£ãŠåŠçãããŸãã ããŒã¿ããŒã¹ããŸã ååšããªãå ŽåãEntity Frameworkã¯ãã¢ãã«ã倿Žãããå Žåã«ããŒã¿ããŒã¹ãäœæãåé€ããŸãã¯åäœæã§ããŸãã
Code Firstçšã«éçºãããããŒã¿ã¢ã¯ã»ã¹APIã¯ã
DbContext
ã¯ã©ã¹ã«åºã¥ããŠããŸãã APIã¯ãéçºæã«Database Firstã¢ãããŒãããã³Model Firstã¢ãããŒãã䜿çšããããšãã§ããŸãã ã
ã³ãŒããã¡ãŒã¹ããã³ãŒããã¡ãŒã¹ãã§ã¯ãªãå Žå ããåç
§ããŠãã ãã
ã Entity FrameworkéçºããŒã ã®ããã°ã
POCOïŒãã¬ãŒã³ãªãŒã«ãCLRãªããžã§ã¯ãïŒ
ããã©ã«ãã§ã¯ãããŒã¿ããŒã¹ãã¡ãŒã¹ãããã³ã¢ãã«ãã¡ãŒã¹ãã¢ãããŒãã®å ŽåãããŒã¿ã¢ãã«ã¯ã©ã¹ã¯
EntityObjectããç¶æ¿ããEntity Frameworkæ©èœãæäŸããŸãã ããã¯ããããã®ã¯ã©ã¹ã
æ°žç¶çã«ç¡ç¥ã§ã¯ãªãããã
ãã¡ã€ã³é§åèšèšã®æ¡ä»¶ã®1ã€ã«å®å
šã«æºæ ããŠããªãããšãæå³ã
ãŸã ã Entity Frameworkã䜿çšãããã¹ãŠã®éçºã¢ãããŒãã¯ãPOCOïŒ
ãã¬ãŒã³ãª å€ã CLR ãªããžã§ã¯ã ïŒã§ãæ©èœã
ãŸã ãããã¯ãäžè¬ã«ã
EntityObject
ã®ç¶æ¿ããªãããã«æ°žç¶æ§ãç¡èŠããããšãæå³ããŸãã
MVC Webã¢ããªã±ãŒã·ã§ã³ã®äœæ
Visual Studioãéãã
ASP.NET MVC 3 Webã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠæ°ãããContosoUniversityããããžã§ã¯ããäœæã
ãŸã ã
æ°ãã ASPã§ã NET MVC 3 ãããžã§ã¯ãã§ ã
ã€ã³ã¿ãŒããã ã¢ããªã±ãŒã·ã§ã³ãã³ãã¬ãŒããš
Razorãã¥ãŒãšã³ãžã³ãéžæãã[
ãŠããã ãã¹ã ãããžã§ã¯ãã® äœæ ]ãã§ãã¯ããã¯ã¹ããªãã«ããŠ[
OK ]ãã¯ãªãã¯ããŸãã

ã¹ã¿ã€ã«ã®ã«ã¹ã¿ãã€ãº
ããã€ãã®å°ããªä¿®æ£ã«ããããµã€ãã®ã¡ãã¥ãŒãã¢ã€ãã ã®ã¬ã€ã¢ãŠããããã³ããŒã ããŒãžã倿ŽãããŸãã
Contoso Universityã¡ãã¥ãŒãã«ã¹ã¿ãã€ãºããã«ã¯ã
Views \ Shared \ _ Layoutã§ã äŸã®ããã«ã
cshtmlã¯
h
1
ã®ããã¹ããšã¡ãã¥ãŒã®ãªã³ã¯ã眮ãæããŸãã
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> </head> <body> <div class="page"> <div id="header"> <div id="title"> <h1>Contoso University</h1> </div> <div id="logindisplay"> @Html.Partial("_LogOnPartial") </div> <div id="menucontainer"> <ul id="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Students", "Index", "Student")</li> <li>@Html.ActionLink("Courses", "Index", "Course")</li> <li>@Html.ActionLink("Instructors", "Index", "Instructor")</li> <li>@Html.ActionLink("Departments", "Index", "Department")</li> </ul> </div> </div> <div id="main"> @RenderBody() </div> <div id="footer"> </div> </div> </body> </html>
Views \ Home \ Index.cshtmlã§ã
h2
ã¿ã°ã®ãã¹ãŠãåé€ããŸãã
Controllers \ HomeController.csã§ ããASP.NET MVCãžããããïŒãã眮ãæããŸãã ãContoso UniversityãžããããïŒã
ã³ã³ãã³ã\ ãµã€ãå
ã cssã§ã¡ãã¥ãŒãå·Šã«ç§»åãããšã次ã®å€æŽãè¡ãããŸãã
#main
ãããã¯ã«clear: both
远å clear: both
ã
#main { clear: both; padding: 30px 30px 15px 30px; background-color: #fff; border-radius: 4px 0 0 0; -webkit-border-radius: 4px 0 0 0; -moz-border-radius: 4px 0 0 0; }
nav
ããã³#menucontainer
clear: both; float: left
clear: both; float: left
clear: both; float: left
ïŒ
nav, #menucontainer { margin-top: 40px; clear: both; float: left; }
ãããžã§ã¯ããå®è¡ããŸãã
![clip_image001 [1] clip_image001 [1]](https://habrastorage.org/getpro/habr/post_images/ec5/1c2/3d7/ec51c23d77f7fc6c2583d38c5d71e423.png)
ããŒã¿ã¢ãã«ã®äœæ
次ã«ãContoso Universityã®æåã®ãšã³ãã£ãã£ã¯ã©ã¹ãäœæããŸãã æ¬¡ã®3ã€ã®ãšã³ãã£ãã£ããå§ããŸãã

Student
ãš
Enrollment
ãšã³ãã£ãã£ã®éã«1
Enrollment
é¢ä¿ã確ç«ããã
Course
ãš
Enrollment
éã«1
Enrollment
é¢ä¿ã確ç«ãããŠããŸãã ã€ãŸããåŠçã¯ä»»æã®æ°ã®ã³ãŒã¹ã«åå ã§ããã³ãŒã¹ã«ã¯ä»»æã®æ°ã®åŠçãåå ã§ããŸãã
å°æ¥çã«ã¯ããããã®ãšã³ãã£ãã£ããšã«ã¯ã©ã¹ãäœæããŸãã
泚ïŒãããã®ãšã³ãã£ãã£ã®ã¯ã©ã¹ãäœæããã«ãããžã§ã¯ããã³ã³ãã€ã«ãããšãã³ã³ãã€ã©ãšã©ãŒãçºçããŸãã
ãšãã»ã³ã¹åŠç
Modelsãã©ã«ããŒã§ã
StudentãäœæããŸã
ã csããã³çæãããã³ãŒããæ¬¡ã®ããã«çœ®ãæããŸãã
using System; using System.Collections.Generic; namespace ContosoUniversity.Models { public class Student { public int StudentID { get; set; } public string LastName { get; set; } public string FirstMidName { get; set; } public DateTime EnrollmentDate { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } } }
StudentID
ããããã£ã¯ã察å¿ããããŒãã«ã®äž»ããŒã«ãªããŸãã æ¢å®ã§ã¯ãEntity Frameworkã¯
ID
ãŸãã¯
ã¯ã©ã¹å ID
ãæã€ããããã£ãäž»ããŒãšããŠæ±ããŸãã
Enrollments
ããããã£-
ããã²ãŒã·ã§ã³ãããã㣠ã ããã²ãŒã·ã§ã³ããããã£ã«ã¯ãçŸåšã«é¢é£ããä»ã®ãšã³ãã£ãã£ãå«ãŸããŸãã ãã®å Žåã
Enrollments
ããããã£ã«ã¯ãçŸåšã®
Student
ãšã³ãã£ãã£ã«é¢é£ä»ããããŠãããã¹ãŠã®
Enrollment
ãšã³ãã£ãã£ãå«ãŸããŸãã ã€ãŸããããŒã¿ããŒã¹å
ã®ç¹å®ã®
Student
ã¬ã³ãŒãã2ã€ã®
Enrollment
ã¬ã³ãŒãïŒ
StudentID
å€éšããŒ
StudentID
åŠçã®ãã©ã€ããªããŒå€ãå«ãã¬ã³ãŒãïŒã«é¢é£ä»ããããŠããå Žåããã®
Enrollments
ã¬ã³ãŒãã®ããããã£ã«ã¯2ã€ã®
Enrollment
ãšã³ãã£ãã£ãå«ãŸããŸãã
éåžžãããã²ãŒã·ã§ã³ããããã£ã¯ã
é
å»¶ èªã¿èŸŒã¿ãšåŒã°ããEntity Frameworkæ©èœã䜿çšããããã«ã
virtual
修食åã§ããŒã¯ãããŸãã ïŒé
å»¶èªã¿èŸŒã¿ã®æ¬è³ªã«ã€ããŠã¯ã
é¢é£ããŒã¿ã®èªã¿åãã§èª¬æã
ãŸã ïŒããã²ãŒã·ã§ã³ããããã£ã«è€æ°ã®ãšã³ãã£ãã£ïŒå€å¯Ÿå€ããã³1
ICollection
é¢ä¿ïŒãå«ããããšãã§ããå Žåããã®ã¿ã€ãã¯
ICollection
å¿
èŠããããŸãã
ãšã³ãã£ãã£ç»é²
Modelsãã©ã«ããŒã§ã
ç»é²ãäœæããŸã
ã æ¬¡ã®å
容ã®
cs ïŒ
using System; using System.Collections.Generic; namespace ContosoUniversity.Models { public class Enrollment { public int EnrollmentID { get; set; } public int CourseID { get; set; } public int StudentID { get; set; } public decimal? Grade { get; set; } public virtual Course Course { get; set; } public virtual Student Student { get; set; } } }
decimal
åŸã®çå笊ã¯ã
Grade
ããããã£ãnullå€ã§ããããšã瀺ããŸãã nullã«èšå®ãããè©äŸ¡ã¯ãŒãè©äŸ¡ãšã¯ç°ãªããŸããnullã¯è©äŸ¡ããŸã èšå®ãããŠããªãããšãæå³ããŸããã0ã¯æ¢ã«å€ã§ãã
StudentID
ããããã£ã¯å€éšããŒã§ããã察å¿ããããã²ãŒã·ã§ã³ããããã£ã¯
Student
ã§ãã
Enrollment
ãšã³ãã£ãã£ã¯1ã€ã®
Student
ãšã³ãã£ãã£ã«é¢é£ä»ããããŠãããããããããã£ã«ã¯æå®ãããã¿ã€ãã®1ã€ã®ãšã³ãã£ãã£ã®ã¿ãå«ããããšãã§ããŸãïŒ
Enrollments
ãšã¯ç°ãªã
.
ïŒã
CourseID
ããããã£ã¯å€éšããŒã§ããã察å¿ããããã²ãŒã·ã§ã³ããããã£ã¯
Course
ã§ãã
Enrollment
ãšã³ãã£ãã£ã¯ã1ã€ã®
Course
ãšã³ãã£ãã£ã«é¢é£ä»ããããŠããŸãã
ãšãã»ã³ã¹ã³ãŒã¹
Modelsãã©ã«ããŒã§ã
ã³ãŒã¹ãäœæããŸã
ã æ¬¡ã®å
容ã®
cs ïŒ
using System; using System.Collections.Generic; namespace ContosoUniversity.Models { public class Course { public int CourseID { get; set; } public string Title { get; set; } public int Credits { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } } }
Enrollments
ããããã£-ããã²ãŒã·ã§ã³ããããã£ã
Course
ãšã³ãã£ãã£ã¯ãç¡å¶éã®
Enrollment
ãšã³ãã£ãã£ã«é¢é£ä»ããããšãã§ããŸãã
ããŒã¿ããŒã¹ã³ã³ããã¹ãã®äœæ
çŸåšã®ããŒã¿ã¢ãã«ã®Entity Frameworkã®æ©èœã調æŽããã¡ã€ã³ã¯ã©ã¹ã¯ã
ããŒã¿ããŒã¹ ã³ã³ããã¹ããšåŒã°ã
ãŸã ã ãã®ã¯ã©ã¹ã¯
System
ç¶æ¿ã
System
.
Data
Entity
DbContext
ã³ãŒãã§ã¯ãããŒã¿ã¢ãã«ã«å«ãããšã³ãã£ãã£ã決å®ããEntity Frameworkèªäœã®åäœã決å®ããããšãã§ããŸãã ã³ãŒãã§ã¯ããã®ã¯ã©ã¹ã¯
SchoolContext
ãšåŒã°ããŸãã
DALãã©ã«ããŒãäœæãããã®äžã«æ°ãã
SchoolContextã¯ã©ã¹ãäœæããŸã
ã cs ïŒ
using System; using System.Collections.Generic; using System.Data.Entity; using ContosoUniversity.Models; using System.Data.Entity.ModelConfiguration.Conventions; namespace ContosoUniversity.Models { public class SchoolContext : DbContext { public DbSet<Student> Students { get; set; } public DbSet<Enrollment> Enrollments { get; set; } public DbSet<Course> Courses { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } } }
ã³ãŒãã¯ããšã³ãã£ãã£ã®åã»ããã«å¯ŸããŠ
DbSet
ããããã£ãäœæããŸãã Entity Frameworkã®çšèªã§ã¯ã
ãšã³ãã£ã㣠ã»ããã¯ããŒã¿ããŒã¹ããŒãã«ãæãããšã³ãã£ãã£ã¯ããŒãã«å
ã®ã¬ã³ãŒããæããŸããOnModelCreating
ããŒãã«åãè€æ°åœ¢ããä¿è·ããŸããããããªããšã
Students
ã
Courses
ã
Enrollments
ãªã©ã®ããŒãã«åãååŸããŸãã ãã以å€ã®å ŽåãããŒãã«åã¯
Student
ã
Course
ã
Enrollment
ãŸãã éçºè
ã¯ãããŒãã«åãè€æ°åœ¢ã«ãããã©ãããè°è«ããŸãã åäžã®ãã©ãŒã ã䜿çšããŸãããéèŠãªããšã¯ããã®è¡ãã³ãŒãã«å«ãããã©ãããéžæã§ããããšã§ãã
ïŒãã®ã¯ã©ã¹ã¯ããŒã ã¹ããŒã¹ã¢ãã«ã«ãããŸããç¶æ³ã«ãã£ãŠã¯ãã³ãŒããã¡ãŒã¹ãã¢ãããŒãã§ã¯åãããŒã ã¹ããŒã¹ã§ãšã³ãã£ãã£ã¯ã©ã¹ãšã³ã³ããã¹ããèŠã€ããå¿
èŠãããããã§ããïŒ
æ¥ç¶æååã®å®çŸ©
æ¥ç¶æååãå®çŸ©ããå¿
èŠã¯ãããŸããã ãã®è¡ãå®çŸ©ããªãå ŽåãEntity Frameworkã¯èªåçã«SQL Server ExpressããŒã¿ããŒã¹ãäœæããŸãã ãã ããSQL Server Compactã§äœæ¥ããããããããç€ºãæ¥ç¶æååãäœæããå¿
èŠããããŸãã
ãŠã§ããéã
ãŸãã æ§æããconnectionStringsã³ã¬ã¯ã·ã§ã³ã«æ°ããæ¥ç¶æååã远å ããŸãã ïŒ
WebãæŽæ°ããŠããããšã確èªããŠãã ãã
ããããžã§ã¯ãã®ã«ãŒãã§
æ§æããŸã
ãViewsãã©ã«ããŒã«ã¯å¥ã®
Webã æ§æããããŸãã倿Ž
ããå¿
èŠã¯ãããŸãã ãïŒ
<add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0"/>
æ¢å®ã§ã¯ãEntity Frameworkã¯ããªããžã§ã¯ãã³ã³ããã¹ãã¯ã©ã¹ãšãåŒã°ããæ¥ç¶æååãæ€çŽ¢ããŸãã 远å ããæ¥ç¶æååã¯ãApp_dataããã³SQL Server Compactãã©ã«ããŒã«ããSchool.sdfããŒã¿ããŒã¹ãå®çŸ©ããŸãã
ãã¹ãããŒã¿ã§ããŒã¿ããŒã¹ãåæåãã
Entity Frameworkã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ããŒã¿ããŒã¹ãèªåçã«äœæã§ããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã³ã«ããŸãã¯ã¢ãã«ãæ¢åã®ããŒã¿ããŒã¹ãšåæããŠããªãå Žåã«ã®ã¿çºçããããã«æå®ã§ããŸãã ãŸãããã¹ãããŒã¿ã§äœ¿çšããããŒã¿ããŒã¹ãäœæããåã«ãEntity Frameworkãèªåçã«åŒã³åºãã¡ãœããã䜿çšããŠã¯ã©ã¹ãäœæããããšãã§ããŸãã ã¢ãã«ã倿ŽãããããããŒã¹ãåé€ããŠåäœæããå¿
èŠãããããšã瀺ããŸãã
DALãã©ã«ããŒã§ãæ°ãã
SchoolInitializerã¯ã©ã¹ãäœæããŸã
ã å¿
èŠã«å¿ããŠããŒã¿ããŒã¹ãäœæãããã¹ãããŒã¿ãå
¥åããã³ãŒããå«ã
cs ã
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; using ContosoUniversity.Models; namespace ContosoUniversity.DAL { public class SchoolInitializer : DropCreateDatabaseIfModelChanges<SchoolContext> { protected override void Seed(SchoolContext context) { var students = new List<Student> { new Student { FirstMidName = "Carson", LastName = "Alexander", EnrollmentDate = DateTime.Parse("2005-09-01") }, new Student { FirstMidName = "Meredith", LastName = "Alonso", EnrollmentDate = DateTime.Parse("2002-09-01") }, new Student { FirstMidName = "Arturo", LastName = "Anand", EnrollmentDate = DateTime.Parse("2003-09-01") }, new Student { FirstMidName = "Gytis", LastName = "Barzdukas", EnrollmentDate = DateTime.Parse("2002-09-01") }, new Student { FirstMidName = "Yan", LastName = "Li", EnrollmentDate = DateTime.Parse("2002-09-01") }, new Student { FirstMidName = "Peggy", LastName = "Justice", EnrollmentDate = DateTime.Parse("2001-09-01") }, new Student { FirstMidName = "Laura", LastName = "Norman", EnrollmentDate = DateTime.Parse("2003-09-01") }, new Student { FirstMidName = "Nino", LastName = "Olivetto", EnrollmentDate = DateTime.Parse("2005-09-01") } }; students.ForEach(s => context.Students.Add(s)); context.SaveChanges(); var courses = new List<Course> { new Course { Title = "Chemistry", Credits = 3, }, new Course { Title = "Microeconomics", Credits = 3, }, new Course { Title = "Macroeconomics", Credits = 3, }, new Course { Title = "Calculus", Credits = 4, }, new Course { Title = "Trigonometry", Credits = 4, }, new Course { Title = "Composition", Credits = 3, }, new Course { Title = "Literature", Credits = 4, } }; courses.ForEach(s => context.Courses.Add(s)); context.SaveChanges(); var enrollments = new List<Enrollment> { new Enrollment { StudentID = 1, CourseID = 1, Grade = 1 }, new Enrollment { StudentID = 1, CourseID = 2, Grade = 3 }, new Enrollment { StudentID = 1, CourseID = 3, Grade = 1 }, new Enrollment { StudentID = 2, CourseID = 4, Grade = 2 }, new Enrollment { StudentID = 2, CourseID = 5, Grade = 4 }, new Enrollment { StudentID = 2, CourseID = 6, Grade = 4 }, new Enrollment { StudentID = 3, CourseID = 1 }, new Enrollment { StudentID = 4, CourseID = 1, }, new Enrollment { StudentID = 4, CourseID = 2, Grade = 4 }, new Enrollment { StudentID = 5, CourseID = 3, Grade = 3 }, new Enrollment { StudentID = 6, CourseID = 4 }, new Enrollment { StudentID = 7, CourseID = 5, Grade = 2 }, }; enrollments.ForEach(s => context.Enrollments.Add(s)); context.SaveChanges(); } } }
Seed
ã¡ãœããã¯ãããŒã¹ã³ã³ããã¹ããªããžã§ã¯ããå
¥åãã©ã¡ãŒã¿ãŒãšããŠåãåããããã䜿çšããŠããŒã¿ããŒã¹ã«æ°ãããšã³ãã£ãã£ã远å ããŸãã ã³ãŒãã¯ããšã³ãã£ãã£ã¿ã€ãããšã«ãæ°ãããšã³ãã£ãã£ã®ã³ã¬ã¯ã·ã§ã³ãäœæãããããã察å¿ããDbSetããããã£ã«è¿œå ããŠãããããŒã¿ããŒã¹ã«å€æŽãä¿åããŸãã ãšã³ãã£ãã£ã®åã°ã«ãŒãã®åŸã«
SaveChanges
ãåŒã³åºãå¿
èŠã¯ãããŸããããããã¯ç§ãã¡ãè¡ã£ãŠããããã«ãäŸå€ã®å Žåã«åé¡ãèå¥ããã®ã«åœ¹ç«ã¡ãŸãã
ã°ããŒãã«ã倿Žã
ãŸãã asaxã ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã³ã«ã³ãŒããåŒã³åºãããããã«
cs ïŒ
using System.Data.Entity; using ContosoUniversity.Models; using ContosoUniversity.DAL;
Application_Start
ã¡ãœããã§ãããŒã¿ããŒã¹åæåã³ãŒããå®è¡ããEntity Frameworkã¡ãœãããåŒã³åºããŸãã
Database.SetInitializer<SchoolContext>(new SchoolInitializer());
ã¢ããªã±ãŒã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·ååŸãããŒã¿ããŒã¹ãžã®æåã®ã¢ã¯ã»ã¹ããšã«ãEntity FrameworkãããŒã¿ããŒã¹ãšã¢ãã«ïŒ
SchoolContext
ã¯ã©ã¹ïŒãæ¯èŒãã
SchoolContext
å Žåãã¢ããªã±ãŒã·ã§ã³ãããŒã¿ããŒã¹ãåé€ããŠåäœæããããã«æ§æãããŸãã
å®çšŒåãµãŒããŒã«ã¢ããªã±ãŒã·ã§ã³ããããã€ãããšãã¯ããã¹ãããŒã¿ã§ããŒã¿ããŒã¹ãåæåãããã¹ãŠã®ã³ãŒããåé€ããå¿
èŠããããŸãã
次ã«ãããŒã¿ã衚瀺ããWebããŒãžãäœæããŸããããŒã¿èŠæ±ããã»ã¹ãèªåçã«ããŒã¿ããŒã¹ã®äœæãéå§ããŸãã æ°ããã³ã³ãããŒã©ãŒããå§ããŸããããã®åã«ãããžã§ã¯ãããŸãšããŠãã¢ãã«ãšã³ã³ããã¹ãã¯ã©ã¹ãMVCã³ã³ãããŒã©ãŒã®è¶³å Žã§å©çšã§ããããã«ããŸãã
çåŸçšã³ã³ãããŒã©ãŒã®äœæ
Student
ã³ã³ãããŒã©ãŒãäœæããã«ã¯ã
ãœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã§[
ã³ã³ãããŒã©ãŒ ]ãã©ã«ããŒãã¯ãªãã¯ãã[
远å ]ã[
ã³ã³ãããŒã©ãŒ ]
ãã¯ãªãã¯ã
ãŸã ã [
ã³ã³ãããŒã©ãŒã® 远å ]ã§ã次ã®ã¢ã¯ã·ã§ã³ãšå€æŽãè¡ãã[
远å ]
ãã¯ãªãã¯ããŸãã
- ã³ã³ãããŒã©ãŒåïŒ StudentController ã
- ãã³ãã¬ãŒãïŒ Entity Frameworkã䜿çšãããèªã¿åã/æžã蟌ã¿ã¢ã¯ã·ã§ã³ãšãã¥ãŒãåããã³ã³ãããŒã©ãŒ ã ïŒããã©ã«ãã§ãïŒ
- ã¢ãã«ã¯ã©ã¹ïŒ StudentïŒContosoUniversity.ModelsïŒ ã ïŒããã§ãªãå Žåã¯ããããžã§ã¯ããåæ§ç¯ããŸãïŒ
- ããŒã¿ã³ã³ããã¹ãã¯ã©ã¹ïŒ SchoolContextïŒContosoUniversity.ModelsïŒ
- ãã¥ãŒïŒ RazorïŒCSHTMLïŒ ïŒããã©ã«ãïŒ
Controllers \ StudentControllerãéã
ãŸã ã cs ãããŒã¿ããŒã¹ã³ã³ããã¹ããªããžã§ã¯ããåæåããäœæããã倿°ã衚瀺ãããŸãã
private SchoolContext db = new SchoolContextïŒïŒ;
Index
ã¢ã¯ã·ã§ã³ã¯ãããŒã¿ããŒã¹ã³ã³ããã¹ãã€ã³ã¹ã¿ã³ã¹ã®
Students
ããããã£ãã
Students
ãªã¹ããåéããŸãã
public ViewResult Index() { return View(db.Students.ToList()); }
èªåè¶³å Žã¯ãããŸããŸãª
Student
åãã«äœæãããŸããã èŠåºããšåã®é åºãã«ã¹ã¿ãã€ãºããã«ã¯ã
Views \ Student \ Indexãéã
ãŸãã cshtmlã§ã³ãŒããæ¬¡ã®ããã«çœ®ãæããŸãã
@model IEnumerable<ContosoUniversity.Models.Student> @{ ViewBag.Title = "Students"; } <h2>Students</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th></th> <th>Last Name</th> <th>First Name</th> <th>Enrollment Date</th> </tr> @foreach (var item in Model) { <tr> <td> @Html.ActionLink("Edit", "Edit", new { id=item.StudentID }) | @Html.ActionLink("Details", "Details", new { id=item.StudentID }) | @Html.ActionLink("Delete", "Delete", new { id=item.StudentID }) </td> <td> @Html.DisplayFor(modelItem => item.LastName) </td> <td> @Html.DisplayFor(modelItem => item.FirstMidName) </td> <td> @Html.DisplayFor(modelItem => item.EnrollmentDate) </td> </tr> } </table>
ãµã€ããèµ·åããã
åŠçãã¿ããã¯ãªãã¯ããŸãã
![clip_image002 [1] clip_image002 [1]](https://habrastorage.org/getpro/habr/post_images/af2/ab1/d13/af2ab1d130fa6b33053e07e66e828e9a.png)
ãã©ãŠã¶ãéããŸãã
ãœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã§ ã ContosoUniversity ãããžã§ã¯ãã éžæããŸã ã [
ãã¹ãŠã®ãã¡ã€ã«ã衚瀺]ã [
æŽæ°]ã®é ã«ã¯ãªãã¯ãã
App_Dataãã©ã«ããŒãå±éããŸãã
Schoolãããã«ã¯ãªãã¯ããŸã
ã ãµãŒã㌠ãšã¯ã¹ãããŒã©ãŒãéãããã®
sdf ãããã³
ããŒãã« ã
School.sdfãããã«ã¯ãªãã¯ããåŸã«ãšã©ãŒãçºçããå Žåã¯
ã SQL Server Compact 4.0 çšã® Visual Studio 2010 SP1 ããŒã«ãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ããã ãã¹ãŠãã€ã³ã¹ããŒã«ãããããVisual Studioãåèµ·åããŸãã

åããŒãã«ã«ã¯ãç¬èªã®ãšã³ãã£ãã£ã»ãããš1ã€ã®è¿œå ããŒãã«ããããŸãã
EdmMetadata
ãã¢ãã«ãšããŒã¹ãåæããŠããªãå Žåã«Entity Frameworkãæ±ºå®ããããã«äœ¿çšãããŸãã
ããŒãã«ã®1ã€ãã¯ãªãã¯ããããŒãã«
ããŒã¿ã衚瀺ããŠ
SchoolInitializer
ã¯ã©ã¹ã«ãã£ãŠããŒãããã
ããŒã¿ã衚瀺ããŸãã

æ¥ç¶ãéããŸããããããªããšãã¢ããªã±ãŒã·ã§ã³ã®èµ·åã«åé¡ãããå¯èœæ§ããããŸãã

åæ
Entity Frameworkã®
èŠåã䜿çšããŠãããããEntity Frameworkã®äœæã«å¿
èŠãªã³ãŒãã®éã¯æå°éã§ãã ãããã®ããã€ãã¯ãã§ã«èšåãããŠããŸãïŒ
- ãšã³ãã£ãã£ã¯ã©ã¹åã®è€æ°åœ¢ã¯ãããŒãã«åãšããŠäœ¿çšãããŸãã
- ãšã³ãã£ãã£ããããã£åã¯ååãšããŠäœ¿çšãããŸãã
ID
ãŸãã¯ã¯ã©ã¹å ID
æã€ãšã³ãã£ãã£ã®ããããã£ã¯ãäž»ããŒãšããŠèªèãããŸãã- Entity Frameworkã¯ãã³ã³ããã¹ãã¯ã©ã¹ïŒãã®å Žåã¯
SchoolContext
ïŒãšåãååã®æ¥ç¶æååãèŠã€ããããšã«ãããããŒã¿ããŒã¹ã«æ¥ç¶ããŸãã
ãããã®å¥çŽã¯ç¡å¹ã«ã§ããããšãããããŸããïŒããšãã°ãè€æ°åœ¢ããªãã«ããããšãã§ããŸãïŒããããè¡ãæ¹æ³ã®è©³çްã«ã€ããŠã¯
ããããè€éãªããŒã¿ã¢ãã«ã®äœæããåç
§ããŠãã ãã ã
Entity FrameworkãšSQL Server Compactã䜿çšããŠããŒã¿ãä¿åããã³è¡šç€ºããåçŽãªã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã æ¬¡ã«ãç°¡åãªCRUDïŒäœæãèªã¿åããæŽæ°ãåé€ïŒæäœãå®è¡ããæ¹æ³ãåŠç¿ããŸãã
Alexander BelotserkovskyïŒ
ahriman ïŒã®ç¿»èš³ã«ãååããã ãããããšãããããŸãã
ã¢ããªå
šäœãããŠã³ããŒã |
PDFããã¥ã¢ã«ã®ããŠã³ããŒã