准备工作:
我们新建一个命令行程序,
在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,
然后创建数据库上下文类,这个类的命名要注意,为xxxxDbContext:DbContext,效果如下图所示:
dotnet ef migrations add
作用:创建数据库脚本,当你的Model有变化的时候,它会比对之后重新生成脚本。
正确使用:
dotnet ef migrations add [名称]
我们必须为本次移植脚本进行命名,必须保证每次add的时候,命名是不一样的。
注意事项:
你整个项目(不只是Model部分)不能有任何错误,这条命令才会执行。
提醒:
如果框架正确理解你的代码,你将会在项目中发现Migrations文件夹,该文件夹初始会包含你命名的移植文件,
并且内容大致为:
注意还有一个同名的以.designer.cs结尾的文件,它和上述文件是一起的,具体不多作介绍。
接着使用命令:
dotnet ef database update
这个操作会直接根据你之前的脚本创建数据库,如果数据库已经存在,则更新。
命令执行成功后,数据库会直接受到更改。
这里我们以SQLite为例,假设我们不以连接的方式去写连接字符串,而是直接生成数据库文件:
那么,当dotnet ef database update执行后,会直接在根目录出现数据库文件:
app.db可以使用DB Browser for SQLite进行查看。
一般会生成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时候,数据才被真正添加进了数据库。
[待补充]
参考资料: