博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.Net MVC 常用开发方式之EF Code First
阅读量:4963 次
发布时间:2019-06-12

本文共 2916 字,大约阅读时间需要 9 分钟。

    在我们的工作和学习当中,经常会遇到中小型项目,这些项目除了业务上的区别较大外,对于底层和数据访问,其实都差不多。记得以前做项目时,每次都要重复的写底层操作数据库的代码,不仅浪费时间,也无太大意思,后来接触到了Entity Framework,Linq等技术,发现底层原来可以这么简单,既缩短了大量的开发时间,又提高了代码质量。

   今天就向大家演示两种搭建底层和技术,在此,也给自己做一个笔记。

  CodeFirst,用中文说是代码优先,此技术可以让我们先写代码,然后由Entity Framework根据我们的代码建立数据库。一开始听上去很神奇,接下来,我将用图文并茂的方式,演示出来:

  用学生的那个例子来演示的话,有三张表:学生表,课程表,和成绩表。于是,我们在建好的ASP.NET MVC 项目中的Model层,新建这样三个类

 

View Code
namespace CodeFirstDemo.Models{    public class Course    {        [Key]        public int Id { get; set; }        [Required]        [StringLength(50)]        public string Name { get; set; }    }}

 

View Code
namespace CodeFirstDemo.Models{    public class Student    {        [Key]        public int Id { get; set; }        [Required]        [StringLength(50)]        public string Name { get; set; }    }}
View Code
namespace CodeFirstDemo.Models{    public class Score    {        [Key]        public int Id { get; set; }        public Student Student { get; set; }        public Course Course { get; set; }    }}

如大家所想的那样,这三个类的属性其实就对应了数据库的表结构,值得一提的是,属性为的头上有"[Key]"或"[Required]"的标识,其中[Key]表示在数据库中该字段为主键,[Required]表示不为空,[StringLength]也就是长度了。同时,在Model层和这种标识,也用于客户端和后台的数据验证,MVC的这种模式,相比三层架构来看,着实方便了好多呀(这里只是本人愚见,WebForm中能不能用这种方式验证,我也不知道额,这里留下一个标记,以后研究研究)。

 

接着,我们需要用上面写好的类来生成数据库了,这里我们要利用一个工具,叫EFCodeFrist,可以利用安装ASP.NET MVC 3时自带的NUGet管理器来搜索这个工具,然后点击安装,这当然是最方便的办法,可以一试,但是各种问题,各种安装不了,各种安装错误,很容易打击我们的学习积极性,所以安装不了,我们可以去Visual Studio Gallery下载,其实,只需要引用一个叫做Entity Framework的dll类库即可,如图

 

,这一步完成之后,我们要建立一个StudentInfoEntities的类,这个类要继承自DbContext,而DbContext类在System.Data.Entity命名空间下,该命名空间在没有引用EntityFramework.dll类库的前提下是无法using到的。我们安装EFCodeFirst工具,也就是为了在VS每次创建项目的时候能自动的引用这个dll。

StudentInfoEntities类中的代码如下:

View Code
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data.Entity;namespace CodeFirstDemo.Models{    public class StudentInfoEntities : DbContext    {        public DbSet
Students { get; set; } public DbSet
Courses { get; set; } public DbSet
Scores { get; set; } }}

最后,我们在Web.Config里配置一下数据库的连接字符串,

注意,name属性的值必须与继承自DbContext的类名一致,这样EntityFramework在web.config里才能找到正确的连接字符串,从而访问数据库。如果不写连接字符串,或者name的值不同,EF也会尝试连接本地的数据库,不过生成的数据库名,会是项目名.Models.StudentInfoEntities,一切取决于您了。

一切配置完成之后,就开始运行程序了,显然,当我们点击调试按钮之后,什么都没有发生。。。因为,我们需要一个触发条件,就是写一段读取数据库的代码,这样,EF会根据web.config的连接来读取数据库,如果发现数据库中没有,才会自动创建它,如果已存在,则读取里面的数据并返回。

新建一个HomeController,在Index方法中加入代码:

View Code
namespace CodeFirstDemo.Controllers{    public class HomeController : Controller    {        private StudentInfoEntities db = new StudentInfoEntities();        public string Index()        {            var data = db.Students.ToList();            return "Database is build success!";        }    }}

这样,再运行一个程序,当界面显示出字符的时候,去数据库看一下,数据库是不是自动生成了呢?

同时,您会发现,在Score表中,自动产生外键关系,是不是很方便呢。

 

 

转载于:https://www.cnblogs.com/Alex-bg/archive/2012/10/20/2732300.html

你可能感兴趣的文章
sqlite
查看>>
机电行业如何进行信息化建设
查看>>
9、总线
查看>>
Git 笔记 - section 1
查看>>
HDU6409 没有兄弟的舞会
查看>>
2018 Multi-University Training Contest 10 - TeaTree
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
《人人都是产品经理》书籍目录
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
Fireworks基本使用
查看>>
两台电脑间的消息传输
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>