本文主题:如何在.net core的窗体应用程序Winform环境下,以DB First的方式接入.net core的EntityFramework。
关于Code First的的方式,我之前有写过一个本地加载Sqlite的文章里面有,估计大部人也不知道就是了,那篇文章总共也才几个人阅读。
一、创建项目
本文针对.net core,所以创建Windows Forms App(.NET Core),然后创建1个.net standard的类库,命名为Parctice.Database
二、引入Nuget包
.net core下的关于SqlServer数据库的EF涉及以下2个包:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.SqlServer.Design
我们是DB First,也就是想要从数据库设计来生成代码,所以还需要一个工具包,这个工具包是用来识别指令(Scaffold-DbContext)的:
Microsoft.EntityFrameworkCore.Tools
通过指令Install-Packag,或者包管理器,均可安装,下面的截图是通过包管理器来安装:
以VS2019为例,包管理器的位置在:工具->Nuget包管理器->管理解决方案的Nuget程序包。或者右键解决方案,也可以找到。
其中Microsoft.EntityFrameworkCore.SqlServer.Design在UI层和数据库访问层,都需要安装,效果如下图:
三、创建我们的数据库设计
由于Sql2019没有数据库关系图,所以,我安装了Sql2016,下面是在Sql2016下设计的。其实Sql2017也一样可以。
如上图,我们简单设计了一个省份、城市表。有了数据库关系图,我要设计表结构以及关系,是很方便快捷的事。这样您就可以理解,我为什么放弃安装Sql2019,改选Sql2016或者Sql2017的原因了吧?因为Sql2019默认没有数据库关系图。
Sql2019估计也是有的,但可能要找插件包。
三、建立项目引用关系
在生成数据库结构代码(DbContext)之前,我们需要让UI层引用Database层
四.设置启动项目
需要有一个启动宿主。我们将UI层设为启动项目,如下图:
这里有个话外,不可避免的,我们数据库设计,会随着业务变化而做出修改,那么代码也要重新生成,所以,我们可以单独创建一个宿主项目,这样每次用它来生成代码就行了。
五、打开程序包管理控制台并生成代码
生成代码之前,我们需要将程序包管理控制台的默认项目,修改为数据访问层,如下图:
因为我们是要把代码生成到这里的,所以,默认项目要切换到这里去。它跟宿主启动项目不同,启动项目仍然是UI层。
输入以下指令:
Scaffold-DbContext "Server=.;Database=Practice;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
scaffold-dbcontext(数据库上下文脚手架)指令是用来生成models和context的,即生成模型代码(实体类)和数据库上下文类(Dbcontext的派生类)。关于scaffold-dbcontext指令,您可以网上查找相关文章获取详细说明。
下图是输入指令后的执行画面:
从上图看到,我们生成成功了。然后我们去看下项目是否有对应的代码:
如上图,我们生成出来了,对应的数据库代码,包含实体类Provinces、Cities,以及数据库上下文PracticeContext类。
有了代码后,如何编写基于EF的数据库CRUD,即增删改查,那就是另外一回事了。本文就不讲这些了。
祝您用餐愉快。