MVC 之 Code First

在我们的工作和学习当中,经常会遇到中小型项目,这些项目除了业务上的区别较大 外,对于底层和数据访问,其实都差不多。记得以前做项目时,每次都要重复的写底层操作数据库的代码,不仅浪费时间,也无太大意思,后来接触到了 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

时间: 2024-10-12 20:43:47

MVC 之 Code First的相关文章

MVC VS2012 Code First 数据库迁移教程

1.在"服务资源管理器"连接数据库 2.打开工具-Nuget程序包管理器"程序包管理器控制台" 3.控制台输入命令:PM> Enable-Misgrations 4.以项目MvcGuestbook.Models.MvcGuestbookContext为例: PM> Enable-Misgrations-ContextTypeName MvcGuestbook.Models.MvcGuestbookContext 5.更新数据库:PM>Update-

解决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. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions. 分析: 碰到此错误是由于使用了EF Code First来生成数据库,生成数据库之后又修改了模型. 两种解决方式: 1.在Glo

Mvc ef code first 使用

网上有很多的ef  code first 的使用的方式,很乱,下面是我自己整理出来的,有什么不正确的地方还请指正,本人菜鸟一枚! 1.新建一个类库 =>引用 右击 管理NuGet程序包 添加EntityFramework 类库中就会有添加一个App.config 的文件,打开添加自己的连接数据库的字符串(本地数据库自己新建一个) 2.建立一个实体(比如Student) 3.新建自己的DbContext类 (比如:testContext.cs) 4.打开程序包管理控制台:工具=>库程序包管理器=

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

在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“Code First Migrations ”工具.使用其中的“Send”更新方法,添加Rating字段到每个Book对象与数据库表中. 一.在Book模型中添加“Rating”属性 首先,在Visual Studio打开Models\ Book.cs文件,在Book类中添加一个新的Rating属性

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

在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 默认情况下,当您使用实体框架的“Code First Migrations ”工具,实体框架会自动创建一个数据库.“代码先行功能”首先会添加一个新表到数据库中,以便跟踪数据库的架构是否与模型类同步.如果它们不同步,实体框架会抛出一个错误.这样开发人员在开发时就能更容易地追查问题出在什么地方,而其他的开发方

Asp.net MVC 中Code First 迁移使用

如果模型类(数据库上下文类Context和POCO类)发生改变,与数据库中的结构不一致,系统默认会抛出一个异常.可以考虑使用代码优先迁移. 代码优先迁移执行UpSert数据库操作,它在每一次更新数据库(Update-Database)后执行,添加数据库中没有的记录,更新数据库已有的记录,通过UI添加的记录保持不变.(模型更改前需要重新编译程序,并修改各视图和方法绑定的白名单,如果不是第一次迁移,还需要设置迁移文件交下configtion.cs文件中的seed方法增加或改变字段.)执行步骤如下:

3.MVC基础-Code First 入门完整实例

1.添加一个EF的上下文类  EFDbContext 1 public class EFDbContext:DbContext 2 { 3 public EFDbContext() : base("EFDbContext") 4 { 5 } 6 public DbSet<Product> Product { get; set; } 7 } 2.在Web.config中加入一个数据库连接 <connectionStrings> <add name="

ASP.NET MVC EF 数据库初试水

首先,创建MVC项目,引用EntityFramework,创建了一个Student类 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace EFF.Models { public class Student { public int StudentID { get; set; } public string Name { get; set; } public i

MVC 数据列表显示插件大全

Jgrid 官网示例: http://www.trirand.net/demo/aspnet/mvc/jqgrid/ Code Project示例: http://www.codeproject.com/Articles/421189/jqGrid-MVC-Html-Helper WebGrid: https://msdn.microsoft.com/zh-cn/library/system.web.helpers.webgrid(v=vs.111).aspx Code Project示例: h