This scenario targets a database that doesn’t exist and code first will create, or an empty database that code first will add new tables .

Note: Make sure that the Entity Framework already installed with Visual Studio, otherwise install using NuGet Packages.

Step 1. Creating an MVC Application

  • Open Visual Studio
  • File, New, then click Project
  • Select ASP.NET MVC3/4 Web Application.
  • Enter the name of application as "CodeFirstDemo".
  • Click OK

Step 2. Creating the Model

Right click on the Models folder and create a model with the name of "User" as in the following image and create a property as in the below code,

solution

  1. public class User
  2. {
  3. public int UserId
  4. {
  5. get;
  6. set;
  7. }
  8. public string FirstName
  9. {
  10. get;
  11. set;
  12. }
  13. public string LastName
  14. {
  15. get;
  16. set;
  17. }
  18. public string EMail
  19. {
  20. get;
  21. set;
  22. }
  23. public string Address
  24. {
  25. get;
  26. set;
  27. }
  28. public string PhoneNo
  29. {
  30. get;
  31. set;
  32. }
  33. public string Company
  34. {
  35. get;
  36. set;
  37. }
  38. public string Designation
  39. {
  40. get;
  41. set;
  42. }
  43. }
Step 3. Create a DBContext

Create a class with the Name MVCDBContext as in the following screenshot and write the code as follows in MVCDBContext class.

solution

  1. using System.Data.Entity;
  2. using System.Linq;
  3. using CodeFirstDemo.Models;
  4. namespace CodeFirstDemo
  5. {
  6. public class MVCDBContext: DbContext
  7. {
  8. public DbSet < User > Users
  9. {
  10. get;
  11. set;
  12. }
  13. }
  14. }
[ Note : Make sure that you are using " System.Data.Entity " Namespace. ]

Step 4 : Create a Controller.

Right click on the Controller folder and create a controller with the name "MyController" as in the following image. Write the following code in Mycontroller.cs within Index Action.

solution

  1. public ActionResult Index()
  2. {
  3. var dbContext = new MVCDBContext();
  4. var userList = from user in dbContext.Users select user;
  5. var users = new List < CodeFirstDemo.Models.User > ();
  6. if (userList.Any())
  7. {
  8. foreach(var user in userList)
  9. {
  10. users.Add(new CodeFirstDemo.Models.User()
  11. {
  12. UserId = user.UserId, Address = user.Address,
  13. Company = user.Company, FirstName = user.FirstName,
  14. LastName = user.LastName, Designation = user.Designation,
  15. EMail = user.EMail, PhoneNo = user.PhoneNo
  16. });
  17. }
  18. }
  19. ViewBag.FirstName = "My First Name";
  20. ViewData["FirstName"] = "My First Name";
  21. if (TempData.Any())
  22. {
  23. var tempData = TempData["TempData Name"];
  24. }
  25. return View(users);
  26. }
Now ,
  • Right click on Index and select Add View… as in the following screenshot.
  • Click on Add button that appear in the dialog box.

    View

  • Go to Views folder and choose Index.cshtml in My folder.

    solution

  • Type the following code in Index.cshtml file.
    1. @model List < CodeFirstDemo.Models.User > @
    2. {
    3. ViewBag.Title = "Index";
    4. Layout = "~/Views/Shared/_Layout.cshtml";
    5. }
    6. < h2 > Index
    7. < /h2>
    8. < p >
    9. @Html.ActionLink("Create New", "Create")
    10. < /p>
    11. < div > < table > < tr > < th >
    12. FirstName
    13. < /th> < th >
    14. LastName
    15. < /th> < th > EMail
    16. < /th> < th > Address
    17. < /th> < th > PhoneNo
    18. < /th> < th > Company
    19. < /th> < th > Designation
    20. < /th> < th > < /th> < /tr>
    21. @foreach(var item in Model)
    22. {
    23. < tr > < td >
    24. @Html.DisplayFor(modelItem => item.FirstName)
    25. < /td> < td > @Html.DisplayFor(modelItem => item.LastName)
    26. < /td> < td > @Html.DisplayFor(modelItem => item.EMail)
    27. < /td> < td > @Html.DisplayFor(modelItem => item.Address)
    28. < /td> < td > @Html.DisplayFor(modelItem => item.PhoneNo)
    29. < /td> < td > @Html.DisplayFor(modelItem => item.Company)
    30. < /td> < td > @Html.DisplayFor(modelItem => item.Designation)
    31. < /td> < td > @Html.ActionLink("Edit", "Edit", new
    32. {
    33. id = item.UserId
    34. }) | @Html.ActionLink("Details", "Details", new
    35. {
    36. id = item.UserId
    37. }) | @Html.ActionLink("Delete", "Delete", new
    38. {
    39. id = item.UserId
    40. }) < /td> < /tr>
    41. } < /table> < /div>

    Now, again go to MyController and create a new action with the name of Details as follows.
    1. public ActionResult Details(int ? id)
    2. {
    3. var dbContext = new MVCDBContext();
    4. var userDetails = dbContext.Users.FirstOrDefault(userId => userId.UserId == id);
    5. var user = new CodeFirstDemo.Models.User();
    6. if (userDetails != null)
    7. {
    8. user.UserId = userDetails.UserId;
    9. user.FirstName = userDetails.FirstName;
    10. user.LastName = userDetails.LastName;
    11. user.Address = userDetails.Address;
    12. user.PhoneNo = userDetails.PhoneNo;
    13. user.EMail = userDetails.EMail;
    14. user.Company = userDetails.Company;
    15. user.Designation = userDetails.Designation;
    16. }
    17. return View(user);
    18. }

    Again, Right click on the Details ActionResult and add view as same as index. Write the code as follows in your Details view which you just created.
    1. @model CodeFirstDemo.Models.User
    2. @
    3. {
    4. ViewBag.Title = "Details";
    5. }
    6. < h2 >
    7. Details
    8. < /h2>
    9. < fieldset > < legend > User
    10. < /legend>
    11. < div class = "display-label" > FirstName
    12. < /div> < div class = "display-field" >
    13. @Html.DisplayFor(model => model.FirstName)
    14. < /div> < div class = "display-label" > LastName
    15. < /div> < div class = "display-field" >
    16. @Html.DisplayFor(model => model.LastName)
    17. < /div> < div class = "display-label" > EMail
    18. < /div> < div class = "display-field" >
    19. @Html.DisplayFor(model => model.EMail)
    20. < /div> < div class = "display-label" > Address
    21. < /div> < div class = "display-field" >
    22. @Html.DisplayFor(model => model.Address)
    23. < /div> < div class = "display-label" > PhoneNo
    24. < /div> < div class = "display-field" >
    25. @Html.DisplayFor(model => model.PhoneNo)
    26. < /div> < div class = "display-label" > Company
    27. < /div> < div class = "display-field" >
    28. @Html.DisplayFor(model => model.Company)
    29. < /div> < div class = "display-label" > Designation
    30. < /div> < div class = "display-field" >
    31. @Html.DisplayFor(model => model.Designation)
    32. < /div> < /fieldset> < p >
    33. @Html.ActionLink("Edit", "Edit", new
    34. {
    35. id = Model.UserId
    36. }) | @Html.ActionLink("Back to List", "Index") < /p>

    Repeat the same process for creating an action in MyController for Create, Edit and Delete as follows and also add views.
    1. #region Edit...
    2. /// <summary>
    3. /// Get Action for Edit
    4. /// </summary>
    5. /// <param name="id"></param>
    6. /// <returns></returns>
    7. public ActionResult Edit(int ? id)
    8. {
    9. var dbContext = new MVCDBContext();
    10. var userDetails = dbContext.Users.FirstOrDefault(userId => userId.UserId == id);
    11. var user = new CodeFirstDemo.Models.User();
    12. if (userDetails != null)
    13. {
    14. user.UserId = userDetails.UserId;
    15. user.FirstName = userDetails.FirstName;
    16. user.LastName = userDetails.LastName;
    17. user.Address = userDetails.Address;
    18. user.PhoneNo = userDetails.PhoneNo;
    19. user.EMail = userDetails.EMail;
    20. user.Company = userDetails.Company;
    21. user.Designation = userDetails.Designation;
    22. }
    23. return View(user);
    24. }
    25. /// <summary>
    26. /// Post Action for Edit
    27. /// </summary>
    28. /// <param name="id"></param>
    29. /// <param name="user"></param>
    30. /// <returns></returns>
    31. [HttpPost]
    32. public ActionResult Edit(int ? id, User userDetails)
    33. {
    34. TempData["TempData Name"] = "Akhil";
    35. try
    36. {
    37. var dbContext = new MVCDBContext();
    38. var user = dbContext.Users.FirstOrDefault(userId => userId.UserId == id);
    39. if (user != null)
    40. {
    41. user.FirstName = userDetails.FirstName;
    42. user.LastName = userDetails.LastName;
    43. user.Address = userDetails.Address;
    44. user.PhoneNo = userDetails.PhoneNo;
    45. user.EMail = userDetails.EMail;
    46. user.Company = userDetails.Company;
    47. user.Designation = userDetails.Designation;
    48. dbContext.SaveChanges();
    49. }
    50. return RedirectToAction("Index");
    51. }
    52. catch
    53. {
    54. return View();
    55. }
    56. }#
    57. endregion# region Delete...
    58. /// <summary>
    59. /// Get Action for Delete
    60. /// </summary>
    61. /// <param name="id"></param>
    62. /// <returns></returns>
    63. public ActionResult Delete(int ? id)
    64. {
    65. var dbContext = new MVCDBContext();
    66. var user = new CodeFirstDemo.Models.User();
    67. var userDetails = dbContext.Users.FirstOrDefault(userId => userId.UserId == id);
    68. if (userDetails != null)
    69. {
    70. user.FirstName = userDetails.FirstName;
    71. user.LastName = userDetails.LastName;
    72. user.Address = userDetails.Address;
    73. user.PhoneNo = userDetails.PhoneNo;
    74. user.EMail = userDetails.EMail;
    75. user.Company = userDetails.Company;
    76. user.Designation = userDetails.Designation;
    77. }
    78. return View(user);
    79. }
    80. /// <summary>
    81. /// Post Action for Delete
    82. /// </summary>
    83. /// <param name="id"></param>
    84. /// <param name="userDetails"> </param>
    85. /// <returns></returns>
    86. [HttpPost]
    87. public ActionResult Delete(int ? id, CodeFirstDemo.Models.User userDetails)
    88. {
    89. try
    90. {
    91. var dbContext = new MVCDBContext();
    92. var user = dbContext.Users.FirstOrDefault(userId => userId.UserId == id);
    93. if (user != null)
    94. {
    95. dbContext.Users.Add(user);
    96. dbContext.SaveChanges();
    97. }
    98. return RedirectToAction("Index");
    99. }
    100. catch
    101. {
    102. return View();
    103. }
    104. }#endregion

Create.cshtml

  1. @model CodeFirstDemo.Models.User
  2. @
  3. {
  4. ViewBag.Title = "Create";
  5. } < h2 > Create < /h2> < script src = "@Url.Content("~/Scripts/jquery.validate.min.js ")"
  6. type = "text/javascript" > < /script> < script src = "@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js ")"
  7. type = "text/javascript" > < /script>
  8. @using(Html.BeginForm())
  9. {
  10. @Html.ValidationSummary(true) < fieldset > < legend > User
  11. < /legend> < div class = "editor-label" >
  12. @Html.LabelFor(model => model.FirstName)
  13. < /div> < div class = "editor-field" >
  14. @Html.EditorFor(model => model.FirstName)
  15. @Html.ValidationMessageFor(model => model.FirstName)
  16. < /div> < div class = "editor-label" >
  17. @Html.LabelFor(model => model.LastName)
  18. < /div> < div class = "editor-field" >
  19. @Html.EditorFor(model => model.LastName)
  20. @Html.ValidationMessageFor(model => model.LastName)
  21. < /div> < div class = "editor-label" >
  22. @Html.LabelFor(model => model.EMail)
  23. < /div> < div class = "editor-field" >
  24. @Html.EditorFor(model => model.EMail)
  25. @Html.ValidationMessageFor(model => model.EMail)
  26. < /div> < div class = "editor-label" >
  27. @Html.LabelFor(model => model.Address)
  28. < /div> < div class = "editor-field" >
  29. @Html.EditorFor(model => model.Address)
  30. @Html.ValidationMessageFor(model => model.Address)
  31. < /div> < div class = "editor-label" >
  32. @Html.LabelFor(model => model.PhoneNo)
  33. < /div> < div class = "editor-field" >
  34. @Html.EditorFor(model => model.PhoneNo)
  35. @Html.ValidationMessageFor(model => model.PhoneNo)
  36. < /div> < div class = "editor-label" >
  37. @Html.LabelFor(model => model.Company)
  38. < /div> < div class = "editor-field" >
  39. @Html.EditorFor(model => model.Company)
  40. @Html.ValidationMessageFor(model => model.Company)
  41. < /div> < div class = "editor-label" >
  42. @Html.LabelFor(model => model.Designation)
  43. < /div> < div class = "editor-field" >
  44. @Html.EditorFor(model => model.Designation)
  45. @Html.ValidationMessageFor(model => model.Designation)
  46. < /div> < p > < input type = "submit"
  47. value = "Create" / > < /p> < /fieldset>
  48. } < div > @Html.ActionLink("Back to List", "Index")
  49. < /div>
Delete.cshtml
  1. @model CodeFirstDemo.Models.User
  2. @
  3. {
  4. ViewBag.Title = "Delete";
  5. }
  6. < h2 > Delete
  7. < /h2>
  8. < h3 > Are you sure you want to delete this ?
  9. < /h3> < fieldset > < legend > User
  10. < /legend>
  11. < div class = "display-label" > FirstName
  12. < /div> < div class = "display-field" >
  13. @Html.DisplayFor(model => model.FirstName)
  14. < /div> < div class = "display-label" > LastName
  15. < /div> < div class = "display-field" >
  16. Html.DisplayFor(model => model.LastName)
  17. < /div> < div class = "display-label" > EMail
  18. < /div> < div class = "display-field" >
  19. @Html.DisplayFor(model => model.EMail)
  20. < /div> < div class = "display-label" > Address
  21. < /div> < div class = "display-field" >
  22. @Html.DisplayFor(model => model.Address)
  23. < /div> < div class = "display-label" > PhoneNo
  24. < /div> < div class = "display-field" >
  25. @Html.DisplayFor(model => model.PhoneNo)
  26. < /div> < div class = "display-label" > Company
  27. < /div> < div class = "display-field" >
  28. @Html.DisplayFor(model => model.Company)
  29. < /div> < div class = "display-label" > Designation
  30. < /div> < div class = "display-field" >
  31. @Html.DisplayFor(model => model.Designation)
  32. < /div> < /fieldset>
  33. @using(Html.BeginForm())
  34. { < p > < input type = "submit"
  35. value = "Delete" / > | @Html.ActionLink("Back to List", "Index") < /p>
  36. }
Edit.cshtml
  1. @model CodeFirstDemo.Models.User
  2. @
  3. {
  4. ViewBag.Title = "Edit";
  5. } < h2 > Edit < /h2> < script src = "@Url.Content("~/Scripts/jquery.validate.min.js ")"
  6. type = "text/javascript" > < /script> < script src = "@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js ")"
  7. type = "text/javascript" > < /script>
  8. @using(Html.BeginForm())
  9. {
  10. @Html.ValidationSummary(true) < fieldset > < legend > User < /legend>
  11. @Html.HiddenFor(model => model.UserId) < div class = "editor-label" > @Html.LabelFor(model => model.FirstName) < /div> < div class = "editor-field" > @Html.EditorFor(model => model.FirstName)
  12. @Html.ValidationMessageFor(model => model.FirstName)
  13. < /div> < div class = "editor-label" >
  14. @Html.LabelFor(model => model.LastName)
  15. < /div> < div class = "editor-field" >
  16. @Html.EditorFor(model => model.LastName)
  17. @Html.ValidationMessageFor(model => model.LastName)
  18. < /div> < div class = "editor-label" >
  19. @Html.LabelFor(model => model.EMail)
  20. < /div> < div class = "editor-field" >
  21. @Html.EditorFor(model => model.EMail)
  22. @Html.ValidationMessageFor(model => model.EMail)
  23. < /div> < div class = "editor-label" >
  24. @Html.LabelFor(model => model.Address)
  25. < /div> < div class = "editor-field" >
  26. @Html.EditorFor(model => model.Address)
  27. @Html.ValidationMessageFor(model => model.Address)
  28. < /div> < div class = "editor-label" >
  29. @Html.LabelFor(model => model.PhoneNo)
  30. < /div> < div class = "editor-field" >
  31. @Html.EditorFor(model => model.PhoneNo)
  32. @Html.ValidationMessageFor(model => model.PhoneNo)
  33. < /div> < div class = "editor-label" >
  34. @Html.LabelFor(model => model.Company)
  35. < /div> < div class = "editor-field" >
  36. @Html.EditorFor(model => model.Company)
  37. @Html.ValidationMessageFor(model => model.Company)
  38. < /div> < div class = "editor-label" >
  39. @Html.LabelFor(model => model.Designation)
  40. < /div> < div class = "editor-field" >
  41. @Html.EditorFor(model => model.Designation)
  42. @Html.ValidationMessageFor(model => model.Designation)
  43. < /div> < p > < input type = "submit"
  44. value = "Save" / > < /p> < /fieldset>
  45. } < div > @Html.ActionLink("Back to List", "Index") < /div>
Please make sure your Web.config file looks like the following:

config

Now press F5 to run the application,

Summary

In this walk-through we looked at code first development using a new database. We defined a model using classes and then used that model to create a database and performed CRUD operation.