ASP.NET MVC框架学习#2:数据库(1)Code First

前言

上一章记录了如何以MVC的方式建立一个网页,但是对于网站开发,网页是不够的,还必须用到数据库,只有建立了数据库,网站才算完整。
本章记录几个数据库建立的方式。


何谓ORM

ORM的全名是Object Relational Mapping,是一种编程技术,用于实现面向对象程序语言里,不同系统之间的数据转换,实际应用中,大多数应用在数据库与面向对象程序之间的转换。

.NET应用
ORM框架 / Entity Framework
Database

如上图,当我们的.NET程序视图要读取数据时,只要对ORM框架中的对象读取数据,剩下的工作便可由ORM框架帮我们完成,当ORM访问完数据库以后,再将得到的数据回传给.NET程序。

如此一来,.NET应用程序便可以专注于处理对象,实现MVC关注点分离的原则。

Entity Framework是微软提供的ORM工具,除非特别说明,本系列文章所用的一切ORM手段皆是基于Entity Framework。

Code First Development

Code First Development:程序代码优先开发模式,是一种非常新颖的开发模式,也就是让开发人员可以根据需求,在程序里面建立数据结构,然后通过ORM的管理,转换成实体模型(Entity Model)。直到程序运行后,通过ORM框架,就可以自动创建数据库。

这样开发人员就可以完全不需要接触数据库的操作管理,也不用学习各式数据库的使用,省去大量工作内容,增加对开发的关注度。

本系列文章中,如非特别说明,都是基于Code First模式开发。


第一个数据库

现在我们基于Code First原则,尝试建立第一个数据库。

实体类

实体类用于定义数据结构

~/Model/Movie.cs

扫描二维码关注公众号,回复: 9952334 查看本文章
using System;
using System.ComponentModel.DataAnnotations;

namespace MvcDemo.Models {
	//数据结构
	public class Movie {
		[Key]
		public int ID { get; set; }
		public string Title { get; set; }
		public string Director { get; set; }
		public string Content { get; set; }
		public DateTime Date { get; set; }
	}
}

上下文类

我们需要一个上下文类,用于管理数据库的链接,注意上下文类可以管理多个数据库。

~/Model/MvcDemoContext.cs

using System.Data.Entity;

namespace MvcDemo.Models {
	public class MvcDemoContext : DbContext
    {
		//数据库连接,注意后缀多个s
		public DbSet<Movie> Movies { get; set; }
	}
}

引用上下文类

想要使用数据库,就必须引用数据库的上下文类,例如:

using System.Web.Mvc;

namespace MvcDemo.Controllers
{
    public class HomeController : Controller {
		//引用数据库上下文类    
		private MvcDemoContext db = new MvcDemoContext();
		public ActionResult Index() {
			return View();
		}
		public ActionResult About() {
			return View(db);
		}
	}
}

这样一来,About页面就能够使用数据库的数据了。


启用自动数据库迁移

通常在开发的时候,我们很难一次性定义一个完美的数据模型,在后期开发中,也有可能不断去完善它,可以如果我们更改数据模型,数据库就会报错,这个时候就需要开启数据库迁移功能。

双击~/Global.asax文件,修改如下

using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Data.Entity;
using MvcDemo.Models;

namespace MvcDemo {
	public class MvcApplication : System.Web.HttpApplication {
		protected void Application_Start() {
			AreaRegistration.RegisterAllAreas();
			FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
			RouteConfig.RegisterRoutes(RouteTable.Routes);
			BundleConfig.RegisterBundles(BundleTable.Bundles);

			//使用数据库初始化器自动迁移
			Database.SetInitializer(new MigrateDatabaseToLatestVersion<MvcDemoContext, DbMigration>());
		}
	}
	//新建数据库迁移类
	public class DbMigration : System.Data.Entity.Migrations.DbMigrationsConfiguration<MvcDemoContext> {
		public DbMigration() {
			this.AutomaticMigrationsEnabled = true;
			this.AutomaticMigrationDataLossAllowed = true;
		}
	}
}
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MvcDemoContext, DbMigration>());

这段代码用人话翻译过来就是:

  • 设置数据库的初始化方式
  • 方式就是迁移数据库到最新的版本
  • 迁移的对象就是前面建立的数据库上下文类,所以尽量用他管理所有的数据库。
  • 迁移的参数需要自定义
public class DbMigration : System.Data.Entity.Migrations.DbMigrationsConfiguration<MvcDemoContext> {
	public DbMigration() {
		//可以自动迁移
		this.AutomaticMigrationsEnabled = true;
		//允许数据模型的成员变量减少,依然迁移数据库。
		this.AutomaticMigrationDataLossAllowed = true;
	}
}

开启之后,即使你更改数据模型,也不会报错,或者要求重新建立数据库。


总结

MVC开发大致可以分为如下几个方面,这几个方面可以同时进行,也可以先后开发,没有固定的要求。

如果是Code First,这先在Model里面定义数据模型,系统自动生成数据库,对于一些大型的项目,或者数据库已经建立好的项目,则使用DataBase First模式,这个时候Model的数据模型就要根据DataBase的内容制定。

DataBase Model View Controller 建立数据模型 连接数据库 编辑对应的View 编辑对应的Controller DataBase Model View Controller
发布了45 篇原创文章 · 获赞 46 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/founderznd/article/details/84976650