后端学习记录 1

大佬让我看的后端教程: https://www.donet5.com/Home/Doc sqlsugar5.0  一个orm框架  


orm框架:简化sql操作的工具 建议参考网址: https://geektutu.com/post/geeorm.html 这是Go关于orm的教程,但是对orm写的很清楚。

正式学习,笔记整理:

工具: VS2022 .NET6 ,个人建的是ASP.NET Core(空)

配置:Nuget包(顶部菜单栏:工具(T)→NuGet包管理器(N)→管理解决方案的NuGet程序包(N))

复制代码
SqlSugarCore        //安装SqlSugar,项目带驱动打包 → 本人安装的
SqlSugarCoreNoDrive //安装SqlSugar,项目打包不带驱动,先上车后补票
Furion.SqlSugar.Template.XXX //手脚架,可以Nuget查版本,已经做过尝试NuGet窗口不能安装,错误提示为:
包“Furion.SqlSugar.Template.App 4.8.8.30”具有一个包类型“Template”,项目“LearnSqlSugar”不支持该类型。
//Furion安装途径 → 在开发者PowerShell或者新建终端,命令行安装:dotnet new --install Furion.SqlSugar.Template.XXX::XXXX 其中XXX是对应手脚架类型,XXXX是版本号
//会提示donet new --install已弃用,请用donet new install。不过它很聪明,仍然会安装的,不用管。
复制代码

然后抛弃这个一次性项目,可以新建模板了。我建了:TestForLearnSqlSugar_App,用的模板是Furion.SqlSugar.Template.App。

避坑:

框架选NET8.0会报错 // 改用了NET6.0
新建项目后运行,错误提示:“无法直接启动带有类库输出类型的项目” 
// 点击“解决方案资源管理器”的整个解决方案,右键选择“属性(R)” 
// 弹出窗口中,左侧选择“通用属性”→“启动项目”,右侧选择“单启动项目(S)”→“xxxxxxxxx(你的项目).Web.Entry”,后点击确定。
// 运行成功,页面标签为:“让.NET更简单,...”

// 原本可以直接点击项目,右键选择“设为启动项目”的,但是我的选项灰了,设置不了。

大佬给我的网址上面的教程只有功能使用,在哪用这个功能没写的,不适合小白(满脸写着高兴)

该网址提供的源码下载学习 : https://gitee.com/dotnetchina/SqlSugar ,根据我目前所学的内容,下载源码后将打开SqlSugar.sln进行学习,目标文件夹sqliteTest。

然后发现目录结构和手脚架完全不一样(满脸更高兴了)

本地配置修改参考: https://www.donet5.com/Home/Doc?typeId=2260 sliteTest不需要更改地址、用户、密码,不用改配置直接跑。

如果要改数据库配置,在SqlSugar解决方案下的SqlSeverTest的Config.cs中修改。


运行后

阅读终端:可以发现程序把Demo所有的Test的建表都跑了一遍。

阅读目录:

复制代码
|SqliteTest
|--|引用|--|
|--|Properties|--|
|--|Bugs
|--|--|BugTest.cs
|--|Demo
|--|--|Demo0_SqlSugarClient.cs
|--|--|Demo1_Queryable.cs
|--|--|Demo2_Updateable.cs
|--|--|Demo3_Insertable.cs
|--|--|Demo4_Deleteable.cs
|--|--|Demo5_SqlQueryable.cs
|--|--|Demo6_Queue.cs
|--|--|Demo7_Ado.cs
|--|--|Demo8_Saveable.cs
|--|--|Demo9_EntityMain.cs
|--|--|DemoA_DbMain.cs
|--|--|DemoB_Aop.cs
|--|--|Democ_GobalFilter.cs
|--|--|DemoD_DbFirst.cs
|--|--|DemoE_CodeFirst.cs
|--|--|DemoF_Utilities.cs
|--|--|DemoG_SimpleClient.cs
|--|--|DemoJ_Report.cs
|--|--|DemoN_SplitTable.cs
|--|Models
|--|--|AttributeTable.cs
|--|--|BoolTest.cs
|--|--|CarType.cs
|--|--|Custom.cs
|--|--|EntityMapper.cs
|--|--|Mapper.cs
|--|--|MyCustomAttributeTable.cs
|--|--|Order.cs
|--|--|Orderltem.cs
|--|--|TestTree.cs
|--|--|Tree.cs
|--|UnitTest
|--|--|Models|--|
|--|--|U...|--|
|--|x64|--|
|--|x86|--|
|--|app.config
|--|Config.cs
|--|Program.cs
SqliteTest下目录
复制代码

程序运行后,入口是program.cs:

复制代码
using System;

namespace OrmTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //Demo
            Demo0_SqlSugarClient.Init();
            Demo1_Queryable.Init();
            DemoN_SplitTable.Init();
            Demo2_Updateable.Init();
            Demo3_Insertable.Init();
            Demo4_Deleteable.Init();
            Demo5_SqlQueryable.Init();
            Demo6_Queue.Init();
            Demo7_Ado.Init();
            Demo8_Saveable.Init();
            Demo9_EntityMain.Init();
            DemoA_DbMain.Init();
            DemoB_Aop.Init();
            DemoC_GobalFilter.Init();
            DemoD_DbFirst.Init(); ;
            DemoE_CodeFirst.Init();
            DemoF_Utilities.Init();
            DemoG_SimpleClient.Init();
            DemoJ_Report.Init();
            //Unit test
            //NewUnitTest.Init();

            //Rest Data
            NewUnitTest.RestData();

            Console.WriteLine("all successfully.");
            Console.ReadKey();
        }

 
    }
}
Program.cs
复制代码

内容是将Demo文件夹内的全init一遍,至于末尾的NewUnitTest,位于UnitTest文件夹下的Main.cs,内容是:

复制代码
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OrmTest
{
    public partial class NewUnitTest
    {
       public static  SqlSugarClient Db=> new SqlSugarClient(new ConnectionConfig()
        {
            DbType = DbType.Sqlite,
            ConnectionString = Config.ConnectionString,
            InitKeyType = InitKeyType.Attribute,
            IsAutoCloseConnection = true,
            AopEvents = new AopEvents
            {
                OnLogExecuting = (sql, p) =>
                {
                    Console.WriteLine(sql);
                    Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
                }
            }
        });

        public static void RestData()
        {
            Db.DbMaintenance.TruncateTable<Order>();
            Db.DbMaintenance.TruncateTable<OrderItem>();
        }
        public static void Init()
        {
            UFilter2.Init();
            UinitCustomConvert.Init();
            UnitNavUpdatee12.Init();
            UnitFilterdafa.Init();
            UInsert3.Init();
            USaveable.Init();
            UnitSubToList.Init();
            UnitByteArray.Init();
            Unit01.Init();
            UnitNavInsertadfa1.Init();
            UnitNavInsertIssue.Init();
            UnitInsertNavN.Init();
            UNavTest.Init();
            UnitTestReturnPkList.Init();
            UCustom01.Init();
            UCustom011.Init();
            UBulkCopy.Init();
            Bulk();
            Insert();
            CodeFirst();
            Updateable();
            Json();
            Ado();
            Queryable();
            QueryableAsync();
            Thread();
            Thread2();
            Thread3();
        }
    }
}
UnitTest/Main.cs
复制代码

就是把同级目录下的U开头文件全执行一遍。

而UnitTest文件夹下的Model文件夹,似乎是存储了各类数据模板。

但是终端跑完后并没有什么结果,打开SqlServer对象资源管理器也没有新的表单出现,教程提供了建表、增删改查的语句,但是怎么在项目中插入、在哪插入那是一句都没提,我看了整整一天了。

(满脸写着高兴)也许我应该下班后跟着视频看。



我把源码关了,打算看看公司项目的代码。既然大佬甩我一个教程,那么项目里肯定有用到。

对于文件夹XXX.ORM下的目录:

复制代码
|FORTOO.ORM
|--|Aop
|--|--|TransactionAspect.cs    //事务切面 异步 过滤 (不懂)
|--|--|TransactionAttribute.cs //内容为空,空构造(但是被40多次引用)
|--|Repository
|--|--|BaseDataRepository.cs   //继承SugarManager, IBaseDataRepository,写
|--|--|BaseReadRepository.cs   //继承SugarManager, IBaseDataRepository,读
|--|--|BaseRepository.cs       //继承SugarDbContext, IBaseRepository,实体数据增删改
|--|--|BusinessRespository.cs  //业务抽象方法实践,似乎是excel表导入导出
|--|--|IBaseDataRepository.cs  //公共写操作,异步方法、同步方法
|--|--|IBaseReadRepository.cs  //公共读操作,异步方法、同步方法
|--|--|IBaseRepository.cs      //基类接口,各种查询删改
|--|--|IBusinessRepository.cs  //公共业务操作CRUD,全异步方法
|--|SqIDatabaseEnum.cs         //意义不明,内嵌“FORTOO,MYHOMEDB”,查了一下应该是DBName
|--|SugarDbContext.cs          //基础类,调用SqlDatabaseEnum、SugarOption,事务配置
|--|SugarManager.cs            //派生自SugarDbContext,取FORTOO
|--|SugarOption.cs             //配置DBConfig、拼接数据库连接字段
复制代码

库类设置不在这里。但是有不少自动生成项。

找上了文件夹AutoMapper中的UserProfile.cs,发现汇总了各类表单的创建语句:

CreateMap<xxxxx>();

鼠标放在上方一段时间后能显示注释(如果源代码有标注的话)

找到了系统菜单类的配置:位于
XXX.DTO>VO>BasicData>SystemMenuButtonVO.cs
XXX.Domain>BasicData>SSysMenu.cs

复制代码
    public class SystemMenuButtonVO{
        /// <summary>菜单主键</summary>
        public int ID { get; set; }
        /// <summary>菜单父级主键</summary>
        public int Parent_ID { get; set; }
        /// <summary>菜单名称</summary>        
        public string? Name { get; set; }
        /// <summary>菜单路径</summary>        
        public string? Path { get; set; }
        /// <summary>组件目录</summary>        
        public string? Component { get; set; }
        /// <summary>菜单元数据</summary>
        public MenuMetaVO? Meta { get; set; }
        /// <summary>菜单名称</summary>
        public string? Title { get; set; }
        /// <summary>菜单图标</summary>
        public string? Icon { get; set; }
        /// <summary>菜单名称</summary>
        public int? Code { get; set; }
        /// <summary>页面是否需要缓存</summary>
        public int? KeepAlive { get; set; }
        /// <summary>菜单描述</summary>
        public string? Remark { get; set; }
        /// <summary>按钮集合</summary>
        public List<SystemButtonVO> Buttons { get; set; } = new List<SystemButtonVO>();
        /// <summary>子菜单</summary>
        public List<SystemMenuButtonVO> Children { get; set; } = new List<SystemMenuButtonVO>();
        /// <summary>按钮主键</summary>
        public List<int> Button_Ids{
            get{
                return Buttons.Select(it => it.ID).ToList();
            }
        }
        /// <summary>菜单按钮名称</summary>
        public string? Funcs_Name{
            get{
                return string.Join(",", Buttons.Select(it => it.Name));
            }
        }
        /// <summary>是否子菜单</summary>
        public int? Type { get; set; }
        /// <summary>是否有效</summary>
        public int? Enable { get; set; }
    }
复制代码

在不停的把类名复制黏贴到Ctrl+Shift+F中查找所有引用并且判断筛选,我终于找到菜单栏的数据库连接在哪了!


公司数据所用数据库有mysql、mssql、Oracle,配置在XXX.Generate>Template>appsettings.json

哦这后端,直接入门到入土。

 

posted @   yyn工作号  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示