c code first mysql_CodeFirst+MySql开发

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

67ed470f0d4afc63537fb4974ac4ef1e.png

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

3d02259708e136475d9959ea6a2f85aa.png

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

①配置文件如下:

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

② CodeFirstDb.cs文件修改如下

9f122b4ec3d29fff83f93be1bf64092d.png

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

2.把MyEntity映射到MySql数据库

1.Enable-Migrations  启动迁移

56b90b58ade8c7b936f66fc15de6bfdf.png

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

internal sealed class Configuration : DbMigrationsConfiguration{//构造函数中可以添加一些迁移前的配置

publicConfiguration()

{

AutomaticMigrationsEnabled= false;

}//在迁移完成后执行,初始化的数据

protected override voidSeed(MysqlCodeFirst.CodeFirstDb context)

{

context.Set().AddOrUpdate(newMyEntity()

{

Id= 1,

Name= "hello ef!"});

}

}

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

0c6c09577ac9235b072b8df0b006bf60.png

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

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

e2f65ee73db9b1ff29612b8cc378f4c9.png

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

public partial classfirstInit: DbMigration

{///

///本次迁移执行的具体操作,即升级数据库。///

public override voidUp()

{//创建架构为"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

}///

///以后如果回滚数据库,那么会执行此降级方法。///

public override voidDown()

{

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脚本

eed39c4c4495fbc7396e3fe056bae9df.png

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

0807dc0e6f970b855269fe47feb79e3e.png

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

参考文献:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值