这是一个采用最新版 .NET 框架为基础搭建的一个项目框架,之所以要做这样一个项目主要是为了在开发一个新项目时能够快速的进入业务逻辑的开发,而不需要每次去重新构建一些项目基础的内容。该项目始于2019年,从 .NET Core 2.2 时代一路迭代过来。
框架的整体技术都是以微软官方的指导进行搭建,个人喜好大道至简的风格,所以并没有对框架进行太多复杂的自定义封装,本项目主要的代码风格接近于微软官方的教程编码风格。
如果你在找一个简单易用的 .NET 基础项目框架,欢迎使用本项目作为基础进行尝试开发,项目包含了很多常用的模块,大家可以根据自己的需要进行裁剪只保留自己用得到的模块,毕竟越简单的东西越稳定。
项目主要整合了如下一些常用的技术点
TaskService 支持 Cron 表达式配置周期性执行方法,未依赖任何第三方组件,原生实现的 Cron 解析方法和服务注册逻辑实现。
管理后台模块 前端使用了 Blazor 技术开发,采用的是 wasm 模式,该模式可以直接将项目编译为 dll 文件运行在客户端的浏览器中,性能相对来说要高一点,并且对于服务器的压力要小很多。
该项目是一个 webapi 的基础项目,主要整合了如下内容:
安装
sc.exe create MyAPI binpath= 'c:\Publish\WebAPI.exe --cd="true"' start= auto
启动
net start 服务名称
如:net start MyAPI
停止
net stop 服务名称
net stop MyAPI
卸载
sc.exe delete 服务名称
如:sc.exe delete MyAPI
设置应用目录权限为777
sudo chmod 777 -R /var/appdata/MyAPI
创建服务定义文件
sudo vim /etc/systemd/system/MyAPI.service
[Unit]
Description=MyAPI
[Service]
WorkingDirectory=/var/appdata/MyAPI
ExecStart=/var/appdata/MyAPI/MyAPI
Restart=always
RestartSec=60
KillSignal=SIGINT
SyslogIdentifier=MyAPI
User=root
[Install]
WantedBy=multi-user.target
保存服务定义文件并启用本服务
sudo systemctl enable MyAPI.service
启用该服务,并确认它正在运行。
sudo systemctl start MyAPI.service
sudo systemctl status MyAPI.service
All
Microsoft.EntityFrameworkCore.Tool
Microsoft.EntityFrameworkCore.Relational
延迟加载
Microsoft.EntityFrameworkCore.Proxies
options.UseLazyLoadingProxies();
SQLServer
驱动:Microsoft.EntityFrameworkCore.SqlServer
数据库生成模型指令:Scaffold-DbContext "ConnectionString" Microsoft.EntityFrameworkCore.SqlServer -OutputDir WebCore -Force
字符串:Data Source=127.0.0.1;Initial Catalog=webcore;User ID=sa;Password=123456;Max Pool Size=100;Encrypt=True
EF 配置:optionsBuilder.UseSqlServer("ConnectionString", o => o.MigrationsHistoryTable("__efmigrationshistory"));
PostgreSQL
驱动:Npgsql.EntityFrameworkCore.PostgreSQL
数据库生成模型指令:Scaffold-DbContext "ConnectionString" Npgsql.EntityFrameworkCore.PostgreSQL -OutputDir webcore -Force
字符串:Host=127.0.0.1;Database=webcore;Username=postgres;Password=123456;Maximum Pool Size=30;SSL Mode=VerifyFull
EF 配置:optionsBuilder.UseNpgsql("ConnectionString", o => o.MigrationsHistoryTable("__efmigrationshistory"));
MySQL
Pomelo.EntityFrameworkCore.MySql
数据库生成模型指令:Scaffold-DbContext "ConnectionString" Pomelo.EntityFrameworkCore.MySql -OutputDir webcore -Force
字符串:server=127.0.0.1;database=webcore;user id=root;password=123456;maxpoolsize=100
EF 配置:optionsBuilder.UseMySql("ConnectionString", new MySqlServerVersion(new Version(8, 0, 29)), o => o.MigrationsHistoryTable("__efmigrationshistory"));
var keyInfo = ECDsa.Create(ECCurve.NamedCurves.nistP256);
var privateKey = Convert.ToBase64String(keyInfo.ExportECPrivateKey());
var publicKey = Convert.ToBase64String(keyInfo.ExportSubjectPublicKeyInfo());
数据存放在 InitData 文件夹的 Excel 中,excel中的数据是清洗好的,需要使用的自行导入 行政区划数据来源于百度平台,地址及清洗代码如下
目前数据截至:202104
https://lbsyun.baidu.com/index.php?title=open/dev-res
insert into RegionArea SELECT CAST(CODE_PROV as int) AS ID, NAME_PROV AS province, '2021-04-01' AS createtime, '0' AS isdelete FROM ditu GROUP BY CODE_PROV, NAME_PROV;
insert into RegionCity SELECT CAST(CODE_CITY as int) as id,NAME_CITY as city,CAST(CODE_PROV as int) as provinceid, '2021-04-01' AS createtime, '0' AS isdelete FROM ditu GROUP BY CODE_CITY,NAME_CITY,CODE_PROV;
insert into RegionProvince SELECT CAST(CODE_COUN as int) as id,NAME_COUN as area,CAST(CODE_CITY as int) as cityid, '2021-04-01' AS createtime, '0' AS isdelete FROM ditu GROUP BY CODE_COUN,NAME_COUN,CODE_CITY;
insert into RegionTown SELECT CAST(CODE_TOWN as int) as id,NAME_TOWN as town,CAST(CODE_COUN as int) as areaid, '2021-04-01' AS createtime, '0' AS isdelete FROM ditu GROUP BY CODE_TOWN,NAME_TOWN,CODE_COUN;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。