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
MVC 之 Code First的更多相关文章
- 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例
在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“ ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- MVC+EF CODE FIRST的使用
1创建标准MVC项目 2通过NuGet安装EF 3在Models文件夹中编写实体类 4创建EFDB上下文类 5在webconfig中创建连接字符串,其中name=EFDB上下文类名 6通过管理控制台执 ...
- 学习ASP.NET MVC(八)——“Code First Migrations ”工具
在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 默认情 ...
- 解决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 ...
- MVC VS2012 Code First 数据库迁移教程
1.在“服务资源管理器”连接数据库 2.打开工具-Nuget程序包管理器“程序包管理器控制台” 3.控制台输入命令:PM> Enable-Migrations -StartUpProjectNa ...
- MVC中code first方式开发,数据库的生成与更新
在使用EF的实际编程中我们经常遇到这样的问题:发现实体结构需要新增加一个字段,或者减少一个字段,急需把实体结构修改,并让数据库更新这种修改.在用Model First或者Database First的 ...
- MVC, EF, Code First 相关问题总结
1. 控制表名单复数: 在DbContext类中修改OnModelCreating()为: protected override void OnModelCreating(DbModelBuilder ...
- Asp.net MVC 中Code First 迁移使用
如果模型类(数据库上下文类Context和POCO类)发生改变,与数据库中的结构不一致,系统默认会抛出一个异常.可以考虑使用代码优先迁移. 代码优先迁移执行UpSert数据库操作,它在每一次更新数据库 ...
随机推荐
- centos,nginx安装备忘
# ssh 登录慢解决 vim /etc/ssh/sshd_config UseDNS no # add limitsvi /etc/security/limits.conf* soft nproc ...
- c++ Primer 第四版 第一阶段 const总结
由于期末值考一门软件安全,所以果断看起c++Primer ,因为之前看谭浩强的c++感觉没什么用啊.所以这本书每阶段做个总结!!! 1.Const限定符作用: 在for循环中上限应该用一个固定变量来设 ...
- Programming Entity Framework 翻译(2)-目录2-章节
How This Book Is Organized 本书组织结构 Programming Entity Framework, Second Edition, focuses on two ways ...
- php工作笔记7-摇动手机,发出请求响应
1.调用
- 修改tomcat应用日志默认编码格式
前言 今天开发跟我说tomcat日志中的中文不能正常显示,根据以往的经验,我觉得可能跟服务器的编码有关,于是尝试各种方法,但还是没能解决问题. 后来我突然想到会不会跟tomcat的设置有关呢,于是在网 ...
- Winform 五种常用对话框控件的简单使用
OpenFileDialog(打开文件对话框)FolderBrowserDialog(浏览文件夹对话框)SaveFileDialog(保存文件对话框)ColorDialog(颜色选择对话框)FontD ...
- MyEclipse配置Tomcat 6
打开首选项 禁用MyEclipse自带的Tomcat 6 下载apache-tomcat-6.0.29.tar.gz 地址:http://yunpan.cn/cKg6kq2RmjdUB 提取码 98 ...
- 最简单的JS图片轮播
var arr=new Array(); arr[1]="";//放图片地址 arr[2]=""; arr[3]=""; var no=0; ...
- Vim命令合集
1.模式切换 三种模式:命令模式,输入模式,底行模式 命令模式与输入模式之间的切换:i esc 命令模式与底行模式的切换:shift + : esc 2. 插入 i:在当前字符的左边插入 I:在当前 ...
- OpenGL ES crash notes 01 - Nice to meet you
这篇笔记完全参照<OpenGL.ES.3.0.Programming.Guide.2nd.Edition>,摘出部分内容只为学习参考. 为什么要用英文:无论是D3D的SDK还是OES的Sp ...