yusongwhu 2019-12-24
1.打开 Visual Studio 并创建项目使用ASP.NET Web 应用程序 (.NET Framework) 模板。项目命名为自己想要的名字,在这里我将它命名为MyMvc。(不怎么好听哈)
点击确定

2.这里我们选择“空”模板,但是可以选择下面的MVC,让vs帮我们添加MVC模式下的文件夹和一些核心的引用,其他项 默认,点击确定

3.创建项目成功后,打开我们的解决方案资源管理器,查看项目文件夹结构

这里就创建好我们的一个基本项目啦!但是因为其中没有任何视图以及控制器,所以他还不能够被执行。
在下面的步骤中,我们先来添加主控制器以及视图。
二、添加主控制器及视图
1.在项目资源管理器项目下的Controller文件夹处,右键点击“添加”,选择添加控制器,这里添加一个“空控制器”,带大家一步一步了解一个基本的MVC,
将创建的控制器命名为“HomeController”,点击添加

2.添加成功后,打开我们刚刚创建的HomeController,找到Index()方法,

3.在该方法处点击右键,点击添加视图

接受默认选项,直接点击添加

vs将会自动帮我们在View文件夹下根据控制器的名称自动创建一个Home文件,Home文件下将会存放一些与Home控制器相关的视图,名称默认会与控制器的Action Method相同
到这里我们的主控制器和视图就创建好了,点击运行,稍作休息,查看一下效果。

4. 我们查看一下View文件夹下的Share文件,找到_ViewStart.cshtml,_ViewStart.cshtml是本项目下所有视图的母版,默认所有视图都会引用该母版,我们稍作修改
(本人怀念一下母校,各位看官可以随意修改),修改一共三处,大家把Application Name和用于展示的名字替换为“想要展示的名称”,例如:
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - 内蒙古工业大学</title>
<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
<link href="~/Content/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="~/Scripts/modernizr-2.6.2.js"></script>
</head>修改后的效果,index看着很不爽啊,来改一下

5.打开View/Home/Index.cshtml,
@{
ViewBag.Title = "Index";
}
<h2>学生信息</h2>这样舒服多了吧,

三、添加实体数据模型
1.找到Models文件,右键添加,选择添加 一个“类”,命名“Student”。

打开创建的Student.cs文件,为Student类添加属性(姓名,性别,注册时间),Enrollments 属性是导航属性。 导航属性中包含与此实体相关的其他实体。
导航属性通常定义为virtual,以便它们可以充分利用 Entity Framework 的特定功能,如延迟加载。
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Gerder { get; set; }
public DateTime EnrollmentDate { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}2.与上一步相同,添加Course和Enrollment两个实体类,属性如下:
第三行处代码表示不为数据库生成该值,后面我们会手动添加CourseId的值。此处会报错,使用Alt+Enter快捷提示,加入引用就好,
也可以手动输入
using System.ComponentModel.DataAnnotations.Schema;
CourseID 属性是一个外键, Course 是与其对应的导航属性。
public class Course
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CourseId { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}第九行处代码, 问号后Grade类型声明指示Grade属性可以为null。
public enum Grade {
A,B,C,D,F
}
public class Enrollment
{
public int EnrollmentId { get; set; }
public int CourseId { get; set; }
public int StudentId { get; set; }
public Grade? Grade { get; set; }
public virtual Course Course { get; set; }
public virtual Student Student { get; set; }
}3.创建数据库上下文
右键单击项目中的解决方案资源管理器并单击添加,然后单击新文件夹。 将新文件夹命名DAL (适用于数据访问层)。

在该文件夹中创建名为的新类文件SchoolContext.cs,创建后先生成一下项目,ctrl+shift+B。
确保生成成功后,打开工具栏的NuGet包管理器,选择程序包控制管理器控制台,敲入以下命令
Install-Package EntityFramework

执行成功后,打开SchoolContext.cs,编写数据库上下文
public class SchoolContext : DbContext
{
public SchoolContext() : base("SchoolContext") { }
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
/// <summary>
/// 当派生上下文的模型已初始化时,但在模型被锁定并用于初始化上下文之前,将调用此方法。此方法的默认实现不执行任何操作,但是可以在派生类中重写此方法,以便可以在锁定模型之前对其进行进一步配置。
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}4.创建数据库连接字符串
打开项目下的Web.Config,在<configuration>条目下添加链接字符串,name要与SchoolContext数据库上下文中获取到的名称一致。
server=.;-----代表当前数据库
1 <connectionStrings> 2 <add name="SchoolContext" connectionString="server=.;database=IMUTDB;uid=sa;pwd=root;" providerName="System.Data.SqlClient" /> 3 </connectionStrings>
5.使用测试数据初始化数据库
在DAL文件夹下,添加SchoolInitializer.cs
public class SchoolInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<SchoolContext>
{
/// <summary>
/// Seed方法采用数据库上下文对象作为输入参数,并在方法中的代码使用该对象来将新实体添加到数据库。
/// </summary>
/// <param name="context"></param>
protected override void Seed(SchoolContext context)
{
var students = new List<Student>
{
new Student{Name="Carson",Gerder="男",EnrollmentDate=DateTime.Parse("2005-09-01")},
new Student{Name="Meredith",Gerder="女",EnrollmentDate=DateTime.Parse("2002-09-01")},
new Student{Name="Arturo",Gerder="男",EnrollmentDate=DateTime.Parse("2003-09-01")},
new Student{Name="Gytis",Gerder="男",EnrollmentDate=DateTime.Parse("2002-09-01")},
new Student{Name="Yan",Gerder="女",EnrollmentDate=DateTime.Parse("2002-09-01")},
new Student{Name="Peggy",Gerder="男",EnrollmentDate=DateTime.Parse("2001-09-01")},
new Student{Name="Laura",Gerder="女",EnrollmentDate=DateTime.Parse("2003-09-01")},
new Student{Name="Nino",Gerder="男",EnrollmentDate=DateTime.Parse("2005-09-01")}
};
students.ForEach(s => context.Students.Add(s));
context.SaveChanges();
var courses = new List<Course>
{
new Course{CourseId=1050,Title="Chemistry",Credits=3,},
new Course{CourseId=4022,Title="Microeconomics",Credits=3,},
new Course{CourseId=4041,Title="Macroeconomics",Credits=3,},
new Course{CourseId=1045,Title="Calculus",Credits=4,},
new Course{CourseId=3141,Title="Trigonometry",Credits=4,},
new Course{CourseId=2021,Title="Composition",Credits=3,},
new Course{CourseId=2042,Title="Literature",Credits=4,}
};
courses.ForEach(s => context.Courses.Add(s));
context.SaveChanges();
var enrollments = new List<Enrollment>
{
new Enrollment{StudentId=1,CourseId=1050,Grade=Grade.A},
new Enrollment{StudentId=1,CourseId=4022,Grade=Grade.C},
new Enrollment{StudentId=1,CourseId=4041,Grade=Grade.B},
new Enrollment{StudentId=2,CourseId=1045,Grade=Grade.B},
new Enrollment{StudentId=2,CourseId=3141,Grade=Grade.F},
new Enrollment{StudentId=2,CourseId=2021,Grade=Grade.F},
new Enrollment{StudentId=3,CourseId=1050},
new Enrollment{StudentId=4,CourseId=1050,},
new Enrollment{StudentId=4,CourseId=4022,Grade=Grade.F},
new Enrollment{StudentId=5,CourseId=4041,Grade=Grade.C},
new Enrollment{StudentId=6,CourseId=1045},
new Enrollment{StudentId=7,CourseId=3141,Grade=Grade.A},
};
enrollments.ForEach(s => context.Enrollments.Add(s));
context.SaveChanges();
}
}四、添加控制器StudentController
1.右键Controller,选择添加控制器,选择包含视图的MVC5控制器(EntityFramework)

模类型选择MyMvc.Models.Student,数据库上下文类选择MyMvc.DAL.SchoolContext,其他保留默认选项,点击添加
注意,将控制器名称“StudnetsController”中的s去掉

这里有可能会发生搭建基架异常的,可以重新生成解决方案(项目解决方案右键--》清理解决方案--》生成解决方案),然后重新生成ctrl+shift+B,一顿操作猛如虎!!!
注:我这里发现了一个问题,在Web.Config中,<configSections>项必须位于<configuration>中的第一项,否则会报错。(一脸懵的错误)

2.在Views/Home/ Index.cshtml中加入一个链接
<li>@Html.ActionLink("Show", "Index", "Student")</li>3.运行项目,点击Show会初始化数据库并跳转到显示界面,这里会需要等待几秒钟,不会很长。

小编这里忘记截图了,项目已经更新了后续的内容,上一张后续功能的运行效果图吧,显示效果差不多

到此,一个简单的CRUD项目就搞定了。