HTML5技术

EF6(CodeFirst)+MySql开发脱坑指南 - kexxxfeng

字号+ 作者:H5之家 来源:博客园 2016-01-03 13:37 我要评论( )

废话 话说当年,在一个春光明媚的晌午,邂逅了迷人的丁香姑娘,从此拜倒在了她的石榴裙下,至今不能自拔,这位丁香姑娘就是ORM思想。 所谓ORM思想,我的理解就是根据一定的规则,把程序中的对象和数据库中的关系数据相互映射转换。在当年之前,我用ADO.NET编

废话

话说当年,在一个春光明媚的晌午,邂逅了迷人的丁香姑娘,从此拜倒在了她的石榴裙下,至今不能自拔,这位丁香姑娘就是ORM思想。

所谓ORM思想,我的理解就是根据一定的规则,把程序中的对象和数据库中的关系数据相互映射转换。在当年之前,我用ADO.NET编写数据持久层,拼接T-Sql语句,这是一个相当繁琐的过程,而且针对不同的数据库,还要调整T-Sql语句。记得,第一个网站上线的时候,数据库改成了MySql的,为了适配MySql,我改了两天的Sql语句。现在每每想起,都不禁摇头哂笑。

ORM思想如何做到屏蔽各大数据库之间的差异呢?程序对象和关系数据之间的相互映射是基于一定的规则的,只要制定好规则,它们的转换就易如反掌。那么,规则怎么制定,谁来制定?规则制定可以简单理解为翻译,即把程序设计语言翻译成数据库语言(T-Sql), 无论什么数据库都兼容最基本的T-Sql语法,外加各自的一些差异。这样不同的程序设计语言就可以针对不同的数据库开发对应的规则。通常数据库厂商或者团队或者社区都会维护这些规则,当然也可以自己DIY。

实现了ORM思想的框架也是琳琅满目,例如:

EntityFramework:.Net程序员最熟悉的啦,由Microsoft支持。

Hibernate:很流行,各种版本的都有。

Dapper:最清凉的,好像就几百K。

And so on……

CodeFirst+MySql使用姿势

如题,本文是使用EntityFramework6框架的感悟(爬坑泪水),以飨同道。

自从学会了EF的基本使用,都是在别人开发好了项目框架上做CRUD,很多细节没有体会到,这次正好有个机会亲自搭建项目框架,深入体会个中奥妙。

配置:win10+vs2015community+.NetFramework4.5.2+MySql5.6

一、基本操作
1、创建控制台项目:CodeFirstDemo。

2、通过NuGet包管理器安装:EntityFramework6.1.3、MySql.Data.Entity6.9.8
检查项目的引用中是否有下图所示的四个引用

wps6001.tmp_thumb

添加新建项→ADO.NET实体对象模型(命名MyContext)→空CodeFirst模型。该模型会自动在app.config中添加连接字符串:

很显然这是默认的MSSqlServer的配置,稍后再来修改。

3、在MyContext中,反注释掉MyEntities及其实现类代码。

public virtual DbSet<MyEntity> MyEntities { get; set; }

public class MyEntity { public int Id { get; set; } public string Name { get; set; } }

这就是程序中的对象。

根据CodeFirst的约定:Id会被设置为主键。

更多约定详见msdn(https://msdn.microsoft.com/zh-cn/data/jj679962)。

4、如何把MyEntity映射到MySql数据库中?。 三步走:

打开vs工具

image_thumb3

第一步: 在控制台中输入Enable-Migrations(启动迁移)。注意:默认项目一定要是模型所在的项目。

image_thumb8

此时项目中会自动生成Migration文件夹

image_thumb10

下面我来解释下Configuration.cs类

这是迁移的配置类,在最后执行迁移的时候会执行这个类。

它有两个方法:

a、Congifuration():无参的构造方法。可以在这里配置迁移之前的操作,后文再详细描述。

b、Seed(MyContext):void:这个方法是在执行迁移成功之后执行,一般用来初始化数据库用的。例如:我要在生成数据库的时候就初始化一条记录。

Seed(CodeFirstDemo.MyContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. E.g. // // context.People.AddOrUpdate( // p => p.FullName, // new Person { FullName = "Andrew Peters" }, // new Person { FullName = "Brice Lambson" }, // new Person { FullName = "Rowan Miller" } // ); // context.MyEntities.AddOrUpdate(new MyEntity() { Name = }); context.SaveChanges(); }

第二步:在控制台输入:Add-Migration InitModel。(InitModel:为本次迁移起个名字)

image_thumb15

此时在项目的Migration文件夹中会自动生成迁移记录文件,文件名以“当前时间_本次迁移的名字”作为类名。

记录文件有一个设计类和一个资源类和一个迁移具体操作的方法。

设计类:本次迁移的具体记录。自动生成、维护。

资源类:默认架构和目标。自动生成、维护。

具体操作:该类维护Up()和Down()两个方法,分别用于升级和降级。有时候需要我们自己定制它,因此要理解它,可以参考我写的注释。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    2017-04-30 16:00

  • 在Delphi下使用迅雷APlayer组件进行免注册开发 - Delphi力量

    在Delphi下使用迅雷APlayer组件进行免注册开发 - Delphi力量

    2017-04-28 15:00

  • 随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 - 在路在的张

    随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 -

    2017-04-22 08:04

  • vue2.0版cnode社区项目搭建及实战开发 - sandisen

    vue2.0版cnode社区项目搭建及实战开发 - sandisen

    2017-04-20 14:00

网友点评
v