序言:众所周知,SinglePage Application是当今比较流行的Web app,本人已经使用mvc5, ef6, webapi2,angular开发一段时间了,不说融会贯通,也算颇有心得吧。之所以现在打算开始写博客,一是为了记录巩固下自己在开发中学习到的东西;二是为了分享给各位广大开发爱好者一起进行沟通学习,毕竟国内的社区真的没有国外的好,希望能够帮到一点,若有任何不足之处,多多指正,多谢。PS:本文是从零开始不断进阶,希望需要的朋友能够多看源码,多按教程写代码,只有动手遇到问题了,才能较快的学习吸收(一开始,我曾看过Angular的书不下3遍,结果一点效果没有,但是当我用Angular开始写项目的时候,就很快能够学习到了,所以请一定要动手操作试着写代码)
二、准备数据层:
1.安装EntityFramework 6:如下图打开Nuget Console,输入以下指令安装各个库(当然你也可以打开Nuget的面板进行手动操作,搜索库名即可,注意库的安装位置不要有误即可)。指令:
Install-Package EntityFramework Domain
Install-Package EntityFramework WebUI
2.创建DbContext:Domain项目新建Class,命名为TutorialEfDbContext,代码如下:
using System.Data.Entity;
namespace Domain
{
public class TutorialEfDbContext:DbContext
{
// base("TutorialEfDbContext") 比较重要,其中里面的字符串要和config文件中数据库连接字符串的名字一致
public TutorialEfDbContext():base("TutorialEfDbContext")
{
Configuration.ProxyCreationEnabled = false; //disable proxy
Configuration.LazyLoadingEnabled = false; //disable lazy load
}
}
}
3.项目下新建文件夹Entities, 文件夹内创建第一个Model Student,代码如下(请注意using 引用):
using System.ComponentModel.DataAnnotations;
namespace Domain.Entities
{
public class Student
{<span style="white-space:pre"> </span>// 每个Model中必须带有Key属性,代表了数据库中的主键
[Key]
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public bool Sex { get; set; }
}
}
4.在TutorialEfDbContext下添加该Student Model 属性,代码如下:
public DbSet<Student> Student { get; set; }
5.在WebUI项目下的Web.Config文件里添加数据库连接字符串(注意:由于页面大小有限我将connectionString属性值写在了两行,在项目中你必须全部放在一行里)
//放在<configuration>的里面
<connectionStrings>
<add name="TutorialEfDbContext" connectionString="Data Source=(localdb)\mssqllocaldb;Initial Catalog=TutorialEfDbContext;
Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
6.再次打开package manager console面板,首先确保default project是Domain,然后依次输入以下指令:
Enable-Migrations 执行完毕后你会发现Domain中自动添加了Migrations文件夹和一个Configuration文件
Add-Migration Initial 执行完毕后Migrations里会有一个以Initial结尾的C#文件,打开文件你会看到Up和Down方法,分别代表了执行和回滚操作时会执行的代码,即创建Student表和删除Student表
Update-Database -Verbose 执行完毕后打开SqlSever,你会发现数据库中已经帮你创建了TutorialEfDbContext数据库和Students表以及MigrationHistory表
至此EF6 Code First的基本操作已经完毕了,让我一一解释操作中比较重要的点。
首先,Code First的好处在于你只用关心你的项目代码,数据库中表的创建等工作只需要几个简单的步骤就可以同步完成了,省时省力省心,是个很好的开始(至于到底Code First好还是Database First好,这个其实在于个人,你喜欢哪个方式,哪个用的熟练就使用哪个)。
接着,使用Migration是在项目开发中十分重要的,因为当你在现实开发中,你的数据库肯定不会是一层不变的,这个时候如果已经有一些实际数据了,而你又不想删掉这些数据,那么你就需要使用到Migration来更改数据库,这样数据不会丢失(除了删表行为),而DropCreateDatabaseIfModelChanges 等都无法达到以上效果,所以学好Migration也是重要的一个环节,在后面的教程中我将一一介绍出来。
鸣谢:我是一名来自盛安德的Shinetecher,感谢盛安德公司及同事们对IT技术的支持,分享和热情,让我有时间和动力完成此博文。
联系:欢迎各位朋友有任何问题和建议留言至此博客下,或者添加本人微信号:liyijia428 进行沟通交流学习
源码:https://github.com/likeconan/MVC5_EF6_Angular2_WebAPI2