SugarSql果糖的新手福利之WebFirst代码生成脚本

本文分享了一个简单的WebFirst代码生成脚本,该脚本仅适用于WebFirst。详细介绍了Entity实体、IRepository接口与实现类、IService接口与实现类、Controller控制器类的生成,还阐述了各层特点,项目使用了依赖注入和swagger。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我分享一个简单的WebFirst代码生成脚本

这个脚本只对WebFirst有用。
在这里插入图片描述
WebFirst是一个工厂,代码工厂。
在这里插入图片描述

Entity 实体生成

在这里插入图片描述
对于 CRUD来说只需要配置主键和自增列就行了 ,如果类的名称和数据库不一样可以设置数据库中的名称

using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace @Model.name_space
{
    /// <summary>
    /// @((Model.Description+"").Replace("\r","").Replace("\n",""))
    ///@(DateTime.Now.ToString("yyyy年MM月dd日 "))【ZXM】
    ///</summary>
    [SugarTable("@(Model.TableName)")]
    public class @(Model.ClassName)
    {
@foreach (var item in Model.PropertyGens)
{
    var isPrimaryKey = item.IsPrimaryKey ? ",IsPrimaryKey = true" : "";
    var isIdentity = item.IsIdentity ? ",IsIdentity = true" : "";
    var isNull=(item.IsNullable&&item.Type!="string"&&item.IsSpecialType==false&&item.Type!="byte[]")?"?":"";
    var isIgnore=(item.IsIgnore?",IsIgnore = true":"");
    var isJson=(item.CodeType.StartsWith("json")?",IsJson= true":"");

    var newPropertyName=item.PropertyName; //这里可以用C#处理 实体属性的显式格式
    //想和数据库一样就用 newPropertyName=item.DbColumnName
    if(System.Text.RegularExpressions.Regex.IsMatch(newPropertyName.Substring(0,1), "[0-9]"))
    {
        newPropertyName="_"+newPropertyName;//处理属性名开头为数字情况
    }
    if(newPropertyName==Model.ClassName)
    {
        newPropertyName="_"+newPropertyName;//处理属性名不能等于类名
    }


    var desc=(item.Description+"").Replace("\r","").Replace("\n","");//处理换行

    if(isIgnore!="")
    {
       isPrimaryKey =isIdentity =isNull="";
     }
        @:/// <summary>
        @:/// @(desc) 
        @if(item.DefaultValue!=null)
        {
        @:/// 默认值: @Raw(item.DefaultValue)
        }
        @:///</summary>
        @: [SugarColumn(ColumnName="@item.DbColumnName" @(isPrimaryKey) @(isIdentity) @(isIgnore) @(isJson))]
        @: public @Raw(item.Type)@isNull @newPropertyName { get; set; }
    }
    }
}

IRepository接口类和Repository实现类生成

在这里插入图片描述
在典型的三层架构中,Repository通常作为数据访问层(Data Access Layer)的一部分存在,负责处理数据访问的细节。下面是一些Repository的特点:

数据访问:Repository的主要职责是封装底层的数据访问操作,例如CRUD(创建、读取、更新、删除)操作。它提供了数据查询、添加、修改、删除等方法供其他层使用。

抽象封装:Repository通过提供数据操作的接口或抽象类,将数据访问细节隐藏在后台,为上层提供统一的接口,使得业务逻辑层能够以更高层次的抽象来调用和操作数据。

单一职责原则:Repository遵循单一职责原则,将数据访问操作与业务逻辑分离,确保了代码的可维护性和可测试性。

可测试性:由于Repository将数据访问操作进行了封装和抽象,因此可以更方便地进行单元测试,而不需要依赖实际的数据存储。

可扩展性:通过Repository模式,可以轻松地切换或扩展底层数据存储,比如从关系型数据库切换到非关系型数据库。由于上层代码只依赖于Repository接口,而不是具体的实现,所以可以更容易地修改或替换底层实现。


    /// <summary>
    /// @((Model.Description+"").Replace("\r","").Replace("\n",""))
    ///@(DateTime.Now.ToString("yyyy年MM月dd日 "))【ZXM】
    ///</summary>
    public interface I@(Model.ClassName)Repository : IBaseRepository<@(Model.ClassName)>
    {
   
   
        Task<Object> AddModel(@(Model.ClassName) model);/*添加实体*/
        Task<Object> GetPageList(search@(Model.ClassName) s);/*分页条件查询*/
        Task<Object> GetById(int id);/*根据id获取实体*/
        Task<Object> UpdateModel(@(Model.ClassName) model);/*更新实体*/
    }

    /// <summary>
    /// @((Model.Description+"").Replace("\r","").Replace("\n",""))
    /// @(DateTime.Now.ToString("yyyy年MM月dd日 "))【ZXM】
    ///</summary>
     public class @(Model.ClassName)Repository : BaseRepository<@(Model.ClassName)>, I@(Model.ClassName)Repository
    {
   
   
        
        public @(Model.ClassName)Repository()
        {
   
   

        }

        public async Task<Object> AddModel(@(Model.ClassName) model)
        {
   
   
            MessageModel<@(Model.ClassName)> message = new MessageModel<@(Model.ClassName)>
            {
   
   
                code = 200,
                msg = "添加成功"
            };
            try
            {
   
   
                var resId = await Db.Insertable(model).ExecuteReturnBigIdentityAsync();
                var resModel=await Db.Queryable<@(Model.ClassName)>().SingleAsync(it=>it.Id==resId);
                message.data=resModel;
            }
            catch(Exception ex)
            {
   
   
               
                message.code = 500;
                message.msg = "请求错误"+ex.Message;
            }
            return message;
        }

          public async Task<Object> UpdateModel(@(Model.ClassName) model)
        {
   
   
            var message = new MessageModel<@(Model.ClassName)>()
            {
   
   
                msg = "修改成功",
                code = 200
            };
            try{
   
   
                var resModel = await Db.Queryable<@(Model.ClassName)>()
                .Where(it => it.Id == model.Id).FirstAsync();
                if (resModel != null)
                {
   
   
                    var resInt = await Db.Updateable(model).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
                    message.data = await Db.Queryable<@(Model.ClassName)>()
                    .Where(it => it.Id == model.Id).FirstAsync();;
                }
                else
                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百锦再@新空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值