一、我有一个sqlite单文件数据库,里面有一张表material,我想把这张表的数据,让c# webapi程序从服务器上输出成json,让客户端可以查询到数据。
二、使用VS2023,安装ASP.net相关开发组件。
三、VS2023中新建一个项目,项目的类型是webapi,用的是ASP.NET Core技术。
产生项目的时候,我们选择一个最小的mini项目,连控制层也不要了。
项目自动创建完成后,文件非常干净:
四、我们要使用微软提供的数据库ORM工具EntityFramework,它可以把数据库映射成程序对象,我们写程序时直接拿来使用就好。EntityFramework有2种,一个是EntityFramework6.4,使用在WINDOWS的平台,它提供ADO实体类的可视化设计器,可以在图像界面很方便的产生程序对象;第二个是EntityFrameworkCore7,它是微软向跨平台开发扩展的ORM工具,但它没有可视化的设计器,还好微软提供了一个tool工具类,我们可以用一条命令把映射的数据库对象直接生成。
博主发现用第一种配置SQLite产生映射对象很难,而第二种方式只需要几分钟。那么,我们就在项目中添加EntityFrameworkCore和工具类来连接上SQLite数据库。在NuGet中安装好就行。
Microsoft.EntityFrameworkCore.Sqlite,Microsoft.EntityFrameworkCore.Tools
然后,我们用一条命令,让EFcore从sqlite数据库给我生成数据库的映射对象出来。
Scaffold-DbContext "Data Source=D:webapicar.db" Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models -UseDatabaseNames -DataAnnotations -Force它把全部的数据库表映射成了对象,统统都给我弄到了项目Models目录中。
这里是tool工具类的这条命令的详细说明:
在 工具-NuGet包管理器-程序包管理控制台 输入
Install-Package Microsoft.EntityFrameworkCore.Tools //安装管理工具
PM> Scaffold-DbContext "Data Source=F:XQX个人项目C#学习SQLiteStudio.db" Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models -UseDatabaseNames -DataAnnotations -Force
-OutputDir *** 实体文件所存放的文件目录
-ContextDir *** DbContext文件存放的目录
-Context *** DbContext文件名
-Schemas *** 需要生成实体数据的数据表所在的模式
-Tables *** 需要生成实体数据的数据表的集合
-DataAnnotations
-UseDatabaseNames 直接使用数据库中的表名和列名(某些版本不支持)
-Force 强制执行,重写已经存在的实体文件
五、我们改了一点原程序,把我们的material表返回给api加上。
执行一下,API运行正常。返回了material表的数据。
六、我们把这个程序功能,做成单独的执行程序来运行,首先弄一下发布功能。
到发布的目录看看,VS2023在目录中产生了好多类库文件,我们可以选择发布成单个的文件,这样简单了好多:
七、执行程序,提示有端口可以访问了。
打开浏览器,访问这个API的地址,我们得到了SQLite数据库material表中的json数据。这样我们为前后端彻底分离做好了准备。
最后,这个程序想要换一下端口,可以用这行代码:
builder.WebHost.UseUrls(new[] { "http://*:8090", "https://*:8091" });最后,基于.net7 微软官方WEBAPI的使用说明:
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-7.0