CodeFirst+MySql开发简单入门

记录一下使用Mysql进行EF Codefirst方式开发的简单过程。

0.准备工作

安装MySql,mysql-connector-net,mysql-for-visualstudio,这部分网上有很多教程,https://blog.csdn.net/ZKH_101/article/details/52518384

1.新建项目,添加组件

新建一个控制台应用程序,名字为MysqlCodeFirst,Nuget安装MySql.Data.Entity

安装完成后项目会多出来以下几个引用

添加新建项→ADO.NET实体对象模型→空CodeFirst模型,名字为CodeFirstDb,执行完这一步,会改变配置文件并添加一个CodeFirstDb.cs文件

①配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>
<connectionStrings>
<add name="CodeFirstDb" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=MysqlCodeFirst.CodeFirstDb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

我们可以看到自动生成的connectionString是连接Ms的,为了连接Mysql我们把connctionStrings改成如下,注意providerName也要切换到Mysql:

 <connectionStrings>
<add name="EntityDb" connectionString="Data Source=.;port=3306;Initial Catalog=CodeFirstDb;user id=root;password=123456;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

② CodeFirstDb.cs文件修改如下

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

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

2.把MyEntity映射到MySql数据库

1.Enable-Migrations  启动迁移

执行后项目生成Migrations文件夹,在该文件夹有Configuration.cs文件,Configuration.cs文件是迁移的配置类,代码如下seed生成时是一个空方法,我们在seed方法中初始化一条数据:

   internal sealed class Configuration : DbMigrationsConfiguration<MysqlCodeFirst.CodeFirstDb>
{
//构造函数中可以添加一些迁移前的配置
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
//在迁移完成后执行,初始化的数据
protected override void Seed(MysqlCodeFirst.CodeFirstDb context)
{
context.Set<MyEntity>().AddOrUpdate(new MyEntity()
{
Id = ,
Name = "hello ef!"
});
}
}

② Add-Migration FirstInit。(为本次迁移起名字为FirstInit)

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

记录文件有一个设计器和一个资源类和一个迁移具体操作的方法,设计器和资源类的内容都是自动维护的,不需要我们操作。

迁移文件类有Up()和Down()两个方法,分别用于升级和降级。我们在修改数据库架构的时候有时候会在这个类型修改配置,代码如下

public partial class firstInit: DbMigration
{
/// <summary>
/// 本次迁移执行的具体操作,即升级数据库。
/// </summary>
public override void Up()
{
//创建架构为"dbo",表名为”MyEntities"的数据库表。
CreateTable(
"dbo.MyEntities",
c => new
{
Id = c.Int(nullable: false, identity: true),//Id,int类型,不可为空,标识列(自动增长)。
Name = c.String(),//Name,string类型
})
.PrimaryKey(t => t.Id);//设置主键为Id }
/// <summary>
/// 以后如果回滚数据库,那么会执行此降级方法。
/// </summary>
public override void Down()
{
DropTable("dbo.MyEntities");//删除架构为"dbo",表名为”MyEntities"的数据库表。
}
}

③ Update-DataBase –script   生成Sql脚本 ,这一步可以不执行的,主要在查错时使用

本例中生成的sql脚本如下:

create table `MyEntities` (`Id` int not null  auto_increment ,`Name` longtext,primary key ( `Id`) ) engine=InnoDb auto_increment=0
create table `__MigrationHistory` (`MigrationId` nvarchar(150) not null ,`ContextKey` nvarchar(300) not null ,`Model` longblob not null ,`ProductVersion` nvarchar(32) not null ,primary key ( `MigrationId`) ) engine=InnoDb auto_increment=0
INSERT INTO `__MigrationHistory`(
`MigrationId`,
`ContextKey`,
`Model`,
`ProductVersion`) VALUES (
'201809070820233_firstInit',
'MysqlCodeFirst.Migrations.Configuration',
0x1F8B0800000000000400CD57DB6EDB38107D5F60FF81E0736AE68262B781DC22759222D83A09AAB4EFB4347688A548551C05D6B7F5A19FB4BFB043EB2ED98E1B144561C0B0C89933670E6786F27FDFBE07EFD689664F903965CD949F4C8E390313D95899D594E7B87CF5377FF7F6CF3F82AB3859B32FB5DD99B7234FE3A6FC11313D17C2458F90483749549459679738896C22646CC5E9F1F11B7172228020386131167CCA0DAA04360FF438B326821473A9E73606EDAA75DA0937A8EC5626E05219C194CF0BF755CFC8EC5A650E39BBD04A128B10F49233698C4589C4F1FCB38310336B56614A0B523F142990DD526A0715F7F3D6FCD0348E4F7D1AA275ACA1A2DCA14D7E10F0E4ACD2450CDD5FA42E6F7423E5AE48612C7CD61BF5BC70E51267C360E7339D79C3A1B893DAE588F5378E9A4AA082F19F2336CB35E6194C0DE498497DC4EEF38556D13F503CD87FC14C4DAE75971F31A4BDDE022DDD6736850C8B4FB0AC58DFC49C89BE9F183A366E1D9F329F1B8367A79CDD5270B9D0D01C7F27F7106D061FC0402611E27B890899F11850A925F6C6F2DF7534AA376A1BCEE672FD11CC0A1F4950B9E6EC5AAD21AE572A069F8DA22E2327CC72E80709447B76E313A55E41A9886E45A03994CBC59693A52EA80ED755A1FAD994982160BF481438CE5A16657B4DDA0ADA46B721D676AF28DBB76E73B1A3CF83B94C5352AED3F7D50A0BCBA69FBD0A7FBC23921243446E4B63346C9B485407720583DDAEBE12E542FAB39BC5C91EB3C52E89EB4823A5875DD00A5FBBF8DFB5DBD60E1D62B4125E535609D5F2264168C874E6C1C8753377A596D996BE9A599D2766576FEEF32E3BA5EB5FAE8C110231E03E14488C141A4C88A1E6FBCA7568D2446FCA76509E41552ACFDF55A3DA294D3823699E54ECEB665E845FF5C4EF4F363F675A51C2ADC55C1AB50487E514E5AF277F0DAEBCDFE7FA11CEC5FAC03BE897DF04CA8BFAECAC1F5D14870F7F4DAF1A086BEC82FCBCD95ECF9E83A677B17776973538E5F1C212F7926877ECBF70B68F9B2210DDD7BCE0129C5AB510FEA5CF40E4ABAD05AD6D6ECCD2D65A537A5D46B5C9E028E6803226952E32544B19216D47E0DCE63EFE22754E2657C902E21B7397639AE38573902C74EF2E0BC4FEF89B0BACCF39B84BFD93FB1929104D4529C09D799F2B1D37BCAFC7A5B80BC2174C55DFC48ADE47086E553448B7D61C0854C977092918DF1D0F90A49AC0DC9D09E513BC841BBD8A7C84958C8A7AB4ED0679FE20FAB207974AAE3299B80AA3F5F77F5D84FFEFF2F67F675569BEED0C0000,
'6.2.0-61023');

第一段创建表MyEntities。

第二段:创建表_MigrationHistory,是EF6框架用来维护模型的表。

  [MigrationId]:遍号,主键,存储设计类中Id,其实就是本次迁移记录的名称。

  [ContextKey]:标记当前上下文的识别码,主键,因为CodeFirst支持多个上下文实例,所以用这个字段来标记。

  [Model]:模型,当前模型的具体描述,加密了。

  [ProductVersion]:EF框架的版本号。

EF6框架通过这张表具体记录每次迁移变化,也是通过这张表来检查程序中的对象和数据库中的关系是否一致。

④ Update-DataBase –verbose(或者-v)。更新数据库并查看sql脚本

然后去看一下数据库,可以看到codefirstdb数据库已经自动生成了,初始化的数据也存入了数据库中

这里采用了最简单的方式实现使用mysql的codefirst开发方式,暂时记录到这里,以后在项目中用到再做进一步记录。

参考文献:

1.https://www.cnblogs.com/kexxxfeng/p/5095812.html

2.https://www.cnblogs.com/summit7ca/p/5423637.html

3.http://www.cnblogs.com/gameman/p/3773240.html

CodeFirst+MySql开发的更多相关文章

  1. EF6(CodeFirst)+MySql开发脱坑指南

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

  2. EF6(CodeFirst)+MySql开发遇到的坑

    最近一不小心偷个懒就已经过了好几个月了,真是惭愧惭愧,出来混终究是要还的,我还是把”脱坑指南“写完吧,-_-~~.点我打开上篇博客 0x001.架构名”dbo”の殇 坑之首也,当提架构名,在mssql ...

  3. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  4. ASP.NET Core 3.0 WebApi 系列【2】.Net Core 3.0+ CodeFirst + MySql 实现数据的迁移

    写在前面 在前一小节中,我们创建了基于RESFULL风格的服务.这个小节,尝试使用CodeFirst+MySql 的方式实现数据迁移. 一.开发环境 [1]运行环境:win10 家庭版 [2]开发工具 ...

  5. Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试

    Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...

  6. 深入理解MySQL开发性能优化.pptx

    深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.

  7. 【MySql】赶集网mysql开发36条军规

    [MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux   写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...

  8. mysql开发中使用存储过程

    在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...

  9. [转载] 根据多年经验整理的《互联网MySQL开发规范》

    原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...

随机推荐

  1. Educational Codeforces Round 61 (Rated for Div. 2)

    A. Regular Bracket Sequence 题意:给出四种括号的数量 ((  )) ()  )( 问是否可以组成合法的序列(只能排序不能插在另外一个的中间) 思路: 条件一:一个或 n个) ...

  2. 【BZOJ2324】[ZJOI2011]营救皮卡丘(网络流,费用流)

    [BZOJ2324][ZJOI2011]营救皮卡丘(网络流,费用流) 题面 BZOJ 洛谷 题解 如果考虑每个人走的路径,就会很麻烦. 转过来考虑每个人破坏的点集,这样子每个人可以得到一个上升的序列. ...

  3. HDU 6319 Problem A. Ascending Rating(单调队列)

    要求一个区间内的最大值和每次数过去最大值更新的次数,然后求每次的这个值异或 i 的总和. 这个序列一共有n个数,前k个直接给出来,从k+1到n个数用公式计算出来. 因为要最大值,所以就要用到单调队列, ...

  4. 【linux】vim常用操作及vim插件的安装使用

    vim是linux下一个非常好用的文本编辑器,在linux下开发的人员要熟练掌握vim常用命令. 1.  打开在第n行 vim +143 filename.txt 2. 只读模式打开 vim -R / ...

  5. Http协议常见状态码

    206 - 断点下载时用到,客户端请求了一部分内容,服务器成功把这部分内容返回给它,这时候就是用这个状态. 301 - 永久跳转,原地址不存在了,url被指向到另一个地址.这个主要是搜索引擎相关,影响 ...

  6. bzoj1030 文本生成器

    题目链接 题意 给出\(n\)个字符串,要构造一个长度为\(m\)的字符串\(S\),使得给出的\(n\)个字符串中至少有一个是\(S\)的子串.问方案数. 思路 \(AC\)自动机+\(DP\) 考 ...

  7. C++基础知识-Day8

    2.类的作用域运算符 shadow 在我们之前讲的内容中,我们会发现一种情况,就是在我们在不同类中的打印函数我们都是尽量让其名字不同,那么为什么会有这种情况呢?首先我们来看一个函数 void func ...

  8. NOIP 提高组 2014 飞扬的小鸟(记录结果再利用的DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9937201.html 参考资料: [1]:https://www.luogu.org/blog/xxzh242 ...

  9. vue,elementUI,less,axios,qs的安装及打包

    目前一直使用vue去搭建项目,我个人习惯用Visual Studio Code编辑工具,所以下面的所有操作都是在这个编辑器中 在安装的时候,为了避免安装过程中出错,你最好安装了淘宝镜像(官网:http ...

  10. nginx 配置两个域名

    1.首先第一步安装: 参考:https://www.cnblogs.com/wyd168/p/6636529.html 启动: /usr/local/nginx/sbin/nginx -c /usr/ ...