EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

[ORM]如何在目框架为.NET Core 2.1的时候使用EntityFrameworkCore

准备工作:

我们新建一个命令行程序,

在vscode的terminal中执行:

dotnet add package Microsoft.EntityFrameworkCore.Design

如果命令执行成功,你将在csproj文件里看到

<PackagReference Include=”Microsoft.EntityFrameworkCore.Design”Version=”2.1.4”>

 

接着执行:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

(这一条不必执行,是我演示要用的)

其实部署在客户机上独立运行程序往往都依赖Sqlite数据库,Sqlite数据库是轻量级数据库,它不需要你安装,你可以像操作文件一样直接管理数据库,它的个人版是免费的。

 

然后我们开始正式进行ORM的操作:

我打算在一个.cs文件中进行,

首先要要保证引用了 Microsoft.EntityFrameworkCore,

S1

然后创建数据库上下文类,这个类的命名要注意,为xxxxDbContext:DbContext,效果如下图所示:

S2

 

dotnet ef migrations add

作用:创建数据库脚本,当你的Model有变化的时候,它会比对之后重新生成脚本。

 

正确使用:

dotnet ef migrations add [名称]

我们必须为本次移植脚本进行命名,必须保证每次add的时候,命名是不一样的。

 

注意事项:

你整个项目(不只是Model部分)不能有任何错误,这条命令才会执行。

 

提醒:

如果框架正确理解你的代码,你将会在项目中发现Migrations文件夹,该文件夹初始会包含你命名的移植文件,

S3

并且内容大致为:

S4

注意还有一个同名的以.designer.cs结尾的文件,它和上述文件是一起的,具体不多作介绍。

 

接着使用命令:

dotnet ef database update

这个操作会直接根据你之前的脚本创建数据库,如果数据库已经存在,则更新。

 

命令执行成功后,数据库会直接受到更改。

 

这里我们以SQLite为例,假设我们不以连接的方式去写连接字符串,而是直接生成数据库文件:

 

那么,当dotnet ef database update执行后,会直接在根目录出现数据库文件:

S5

app.db可以使用DB Browser for SQLite进行查看。

S6

一般会生成3张表,

Musics表就是我们的数据集Musics根据Model映射出来的;_EFMigrationsHistory是用来防止反复移植已经移植过的移植,这张表里面只有2个字段,完全是给框架使用的,不建议删除;最后一张表估计应该是SQLite的特有表。

 

 

我们以后需要增加表,或修改表中的字段,都需要反复执行上述2个命令,

① dotnet ef migrations add [名称]

② dotnet ef database update

注意:

强烈建议,在执行这两条命令之前,先确认你的修改已经是完成状态了,千万不要频繁地去这样操作(除非迫不得已);

在设计阶段,建议研究完成需求,不要想到哪写到哪。

在生产环境中,慎用ORM,“删除跑路”这种事情还是很容易发生的,尤其是在你用ORM的时候。

 

 

使用ORM添加数据:

在main里面

var dbContext=new MyAppDbContext();

dbContext.Musics.Add(new Music

{

     Title=”xxx”;

Genre=”xxx”;

PublishTime=DateTime.Now;

});

dbContext.SaveChanges();

简化了讲,就是在程序运行时,往数据集里面添加数据,由dbcontext暂存,当执行到SaveChanges时候,数据才被真正添加进了数据库。

 

[待补充]

 

 

参考资料:

[1] ORM是什么?为什么开发者很少自己写SQL? - 在10分钟内学会使用EF来操作数据库

This article was last edited at 2020-05-26 20:40:47

* *