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

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

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

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

namespace CodeFirstDemo.Models
{
public class Course
{
[Key]
public int Id { get; set; } [Required]
[StringLength(50)]
public string Name { get; set; }
}
}
namespace CodeFirstDemo.Models
{
public class Student
{
[Key]
public int Id { get; set; } [Required]
[StringLength(50)]
public string Name { get; set; }
}
}
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类中的代码如下:

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<Student> Students { get; set; } public DbSet<Course> Courses { get; set; } public DbSet<Score> Scores { get; set; }
}
}

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

  <connectionStrings>
<add name="StudentInfoEntities" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=StudentInfo;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>

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

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

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

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表中,自动产生外键关系,是不是很方便呢。

喝水不忘挖井人,原博文:http://www.cnblogs.com/Alex-bg/archive/2012/10/20/2732300.html

MVC 之 Code First的更多相关文章

  1. 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例

    在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“ ...

  2. IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)

    转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html  有修改 Autofac通过Controller默认构造 ...

  3. MVC+EF CODE FIRST的使用

    1创建标准MVC项目 2通过NuGet安装EF 3在Models文件夹中编写实体类 4创建EFDB上下文类 5在webconfig中创建连接字符串,其中name=EFDB上下文类名 6通过管理控制台执 ...

  4. 学习ASP.NET MVC(八)——“Code First Migrations ”工具

    在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 默认情 ...

  5. 解决MVC EF Code First错误:Model compatibility cannot be checked because the EdmMetadata type was not included in the model.

    Model compatibility cannot be checked because the EdmMetadata type was not included in the model. En ...

  6. MVC VS2012 Code First 数据库迁移教程

    1.在“服务资源管理器”连接数据库 2.打开工具-Nuget程序包管理器“程序包管理器控制台” 3.控制台输入命令:PM> Enable-Migrations -StartUpProjectNa ...

  7. MVC中code first方式开发,数据库的生成与更新

    在使用EF的实际编程中我们经常遇到这样的问题:发现实体结构需要新增加一个字段,或者减少一个字段,急需把实体结构修改,并让数据库更新这种修改.在用Model First或者Database First的 ...

  8. MVC, EF, Code First 相关问题总结

    1. 控制表名单复数: 在DbContext类中修改OnModelCreating()为: protected override void OnModelCreating(DbModelBuilder ...

  9. Asp.net MVC 中Code First 迁移使用

    如果模型类(数据库上下文类Context和POCO类)发生改变,与数据库中的结构不一致,系统默认会抛出一个异常.可以考虑使用代码优先迁移. 代码优先迁移执行UpSert数据库操作,它在每一次更新数据库 ...

随机推荐

  1. C#打开文件对话框

    OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = System.Environment.CurrentDirector ...

  2. 1.mysql基础之 php 连接

    1.连接数据库 $db=@mysql_connect('DB_HOST','DB_USER','DB_PASS') or die("Unable to connect"); DB_ ...

  3. OAF屏蔽的错误

    ORACLE EBS中OAF屏蔽的错误 ORACLE EBS R12中引入了XML Publisher,Oracle Application Framework等新东西,利用网页/JSP技术增强For ...

  4. asp.net MVC上传图片完整方法

    图片上传 自动创建文件夹并重命名(带缩略图) 后台: [HttpPost] public ActionResult WanSell_UploadPicture(ProductGalleryModels ...

  5. Microsoft CRM 2013 设置默认组织 default organization

    Microsoft CRM 2013 在部署管理器里没有设置默认组织的功能(以前4.0是有的),所以如果安装了多组织并且某些用户在多组织里同时存在这就涉及默认组织的设置问题,或者在安装outlook ...

  6. [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文

    一. 在主函数中实现二维数组的输入. 代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组, 在循环中算出之和,编写 ...

  7. python批量处理excel文件数据

    https://www.zhihu.com/question/39299070?sort=created 作者:水中柳影链接:https://www.zhihu.com/question/392990 ...

  8. robot framework 安装配置

    robot framework 是一款专门用作自动化测试的框架,提供了丰富的内置库,与第三方库,也支持用户自己编写的库,robot framework +library 可以 用来做ui的自动化测试, ...

  9. c++ 别名

    #include <iostream> int main() { ; // 别名 int &ref = i; std::cout << &i << ...

  10. [转载] python 计算字符串长度

    本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...