.NET Core WebApi中实现数据库的操作(之SqlServer)

一、实现效果

.NET Core WebApi基础入门项目源码下载

    

二、SqlSugar数据操作框架介绍

  SqlSugar是一款老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新的国产操作数据库免费开源框架并且可以免费用于商用项目,永远免费

SqlSugar官网           SqlSugar框架中文文档         SqlSugar 5.0中文参考文档

②优点: 简单易用、功能齐全、高性能、轻量级、服务齐全。

③支持数据库:MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓。

④性能:比大部分的DbHelper性能要高,底层采用Emit动态创建数据绑定程序集进行缓存,缓存后的性能可以达到原生水平,相反原始的ADO需要用到大量装箱和拆箱操作性能反而下降。

三、.NET Core WebApi实现数据库操作

3.1、数据库操作的整体逻辑框架

3.2、项目引入【SqlSugarCore】框架的Nuget包

3.3、实现数据库操作内容

 3.3.1、配置数据库的连接字符串和获取

①打开项目的【appsettings.json】文件,添加对应的数据库连接字符串。

"ConnectionStrings": {
    "MySql": "server=数据库所在服务器的IP;userid=数据库账号;password=数据库密码;database=数据库名称;",
    "SqlServer": "server=数据库所在服务器的IP;;uid=数据库账号;pwd=数据库密码;database=数据库名称",
    "Oracle": "Data Source=数据库所在服务器的IP/服务名称;User ID=数据库账号;Password=数据库密码;"

  }

 ②获取配置好的数据库连接字符串

/***
*	Title:".NET Core WebApi" 项目
*		主题:程序配置帮助类
*	Description:
*		功能:
*		    1、初始化配置参数
*		    3、获取到不同类型的数据库的连接串
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Text;

namespace WebApiUtils
{
    public class AppConfigHelper
    {
        #region   基础参数
        //程序配置
        private static IConfiguration _appConfig;

        //数据库连接串
        private static string _dbStrCon = string.Empty;

        #endregion



        #region   公有方法

        /// <summary>
        /// 初始化配置参数
        /// </summary>
        /// <param name="configuration">程序配置</param>
        public static void InitAppConfig(IConfiguration configuration)
        {
            _appConfig = configuration;
        }

        /// <summary>
        /// 获取到不同类型的数据库的连接串
        /// </summary>
        /// <param name="dbType">数据库类型</param>
        /// <returns>返回当前数据库类型的连接串</returns>
        public static string GetDBStrCon(string dbType)
        {
            string field = $"ConnectionStrings:{dbType}";
            return GetAppConfigContext(_dbStrCon, field);
        }


        #endregion


        #region   私有方法
        /// <summary>
        /// 获取到配置内容
        /// </summary>
        /// <param name="appConfigVar">程序配置变量</param>
        /// <param name="appConfigField">程序配置字段</param>
        /// <returns>返回当前数据库类型的连接串</returns>
        private static string GetAppConfigContext(string appConfigVar,string appConfigField)
        {
            if (string.IsNullOrEmpty(appConfigVar))
            {
                appConfigVar = _appConfig[appConfigField];
            }
            return appConfigVar;
        }


        #endregion 

    }//Class_end

}

③在Startup类中获取程序配置

3.3.2、数据库的操作服务

①数据库操作基础上下文

/***
*	Title:".NET Core WebApi" 项目
*		主题:基础数据库操作的上下文
*	Description:
*		功能:
*		    1、打开数据库连接
*		    2、开启事务
*		    3、提交事务
*		    4、回滚事务
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;

namespace WebApiService.Common
{
    class BaseDbContext
    {
        #region   基础参数
        //SqlSugar客户端
        public SqlSugarClient db;

        #endregion


        #region   公有方法

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="conStr">数据库的连接字符串</param>
        /// <param name="dbType">数据库类型</param>
        public BaseDbContext(string conStr,DbType dbType)
        {
            InitDataBase(conStr,dbType);
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="serverIp">服务器IP</param>
        /// <param name="user">用户名称</param>
        /// <param name="password">密码</param>
        /// <param name="dataBase">数据库</param>
        /// <param name="dbType">数据库类型</param>
        public BaseDbContext(string serverIp,string user,string password,string dataBase,DbType dbType)
        {
            string conStr = $"server={serverIp};user id={user};password={password};" +
                $"persistsecurityinfo=True;database={dataBase}";

            InitDataBase(conStr, dbType);
        }


        /// <summary>
        /// 开启事务
        /// </summary>
        public void BeginTransaction()
        {
            db.Ado.BeginTran();
        }

        /// <summary>
        /// 提交事务
        /// </summary>
        public void CommitTransaction()
        {
            db.Ado.CommitTran();
        }

        /// <summary>
        /// 回滚事务
        /// </summary>
        public void RollbackTransaction()
        {
            db.Ado.RollbackTran();
        }

        #endregion 



        #region   私有方法


        /// <summary>
        /// 初始化数据库连接
        /// </summary>
        /// <param name="conStr">连接字符串</param>
        /// <param name="dbType">数据库类型</param>
        private void InitDataBase(string conStr, DbType dbType)
        {
            db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString=conStr,
                DbType=dbType,
                IsAutoCloseConnection=true,
 
            });

            //超时时间(单位:秒)
            db.Ado.CommandTimeOut = 3000;

            //sql执行前可以修改sql
            db.Aop.OnExecutingChangeSql = (sql,para) =>
            {
                return new KeyValuePair<string, SugarParameter[]>(sql,para);
            };

            //sql执行前事件
            db.Aop.OnLogExecuting = (sql, para) =>
            {
                //这里可查看执行的sql语句和参数
            };

            //sql执行完的事件
            db.Aop.OnLogExecuted = (sql,para) =>
            {
                  //这里可查看执行的sql语句和参数
            };

            //sql执行错误事件
            db.Aop.OnError = (ex) =>
            {
                //这里可以查看sql执行错误信息
            };
           


        }


        #endregion 


    }//Class_end

}

②、通用的数据库基础sql语句接口

/***
*	Title:".NET Core WebApi" 项目
*		主题:数据库基础服务接口
*	Description:
*		功能:
*		    1、分页查询集合
*		    2、获取列表集合
*		    3、获取对象
*		    4、判断数据是否存在
*		    5、新增
*		    6、删除
*		    7、修改
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
using WebApiUtils.Entity;

namespace WebApiService.Common
{
    public interface IBaseDbService<T> : IDisposable
    {

        /// <summary>
        /// 分页查询集合
        /// </summary>
        /// <param name="pageIndex">当前页码</param>
        /// <param name="pageSize">当前页码大小</param>
        /// <param name="strField">查询后显示字段(每个字段间以逗号分割,显示全部字段则为null)</param>
        /// <param name="filter">查询条件</param>
        /// <param name="strOrder">排序规则</param>
        /// <param name="totalCount">数据总数</param>
        /// <returns>集合</returns>
        List<T> GetPageList(int pageIndex, int pageSize, string strField, SqlFilterEntity filter,
            string strOrder, out int totalCount);

        /// <summary>
        /// 获取列表集合
        /// </summary>
        /// <param name="strField">查询字段</param>
        /// <param name="filter">查询条件</param>
        /// <returns>数据集合</returns>
        List<T> GetList(string strField,SqlFilterEntity filter);


        /// <summary>
        /// 获取开始数据
        /// </summary>
        /// <param name="top">开始条数</param>
        /// <returns>数据集合</returns>
        List<T> GetStartList(int top=0);


        /// <summary>
        /// 获取对象
        /// </summary>
        /// <param name="strFields">查询字段串(每个字段间用逗号隔开,显示全部字段则为null)</param>
        /// <param name="filter">查询条件</param>
        /// <returns>对象</returns>
        T GetEntity(string strFields,SqlFilterEntity filter);

        /// <summary>
        /// 判断数据是否存在
        /// </summary>
        /// <param name="filter">查询条件</param>
        /// <returns>执行结果(true:表示存在)</returns>
        bool IsExists(SqlFilterEntity filter);

        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="entity">实例对象</param>
        /// <param name="ignoreColumns">排除列</param>
        /// <param name="isLock">是否加锁</param>
        /// <returns>返回自增ID</returns>
        int Insert(T entity,List<string> ignoreColumns=null,bool isLock=false);


        /// <summary>
        /// 根据主键删除
        /// </summary>
        /// <param name="primaryKeyValue">主键值</param>
        /// <param name="isLock">是否加锁</param>
        /// <returns>执行结果(true:表示成功)</returns>
        bool Delete(object primaryKeyValue, bool isLock = false);


        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="entity">实例对象</param>
        /// <param name="ignoreColumns">排除列</param>
        /// <param name="isLock">是否加锁</param>
        /// <returns>执行结果(true:表示成功)</returns>
        bool Update(T entity,List<string> ignoreColumns=null,bool isLock=false);



    }//Class_end

}

③、数据库sql语句的过滤条件

/***
*	Title:".NET Core WebApi" 项目
*		主题:sql过滤实体(即:Where后的条件)
*	Description:
*		功能:
*		    1、追加查询条件
*		    2、添加查询参数
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using System;
using System.Collections.Generic;
using System.Text;

namespace WebApiUtils.Entity
{
    public class SqlFilterEntity
    {
        #region   基础参数
        //过滤条件
        private string _filter = string.Empty;
        //过滤参数字典
        private Dictionary<string, object> _value = null;

        #endregion



        #region   公有方法

        /// <summary>
        /// 查询条件
        /// </summary>
        public string Filter { get => _filter; set => _filter = value; }

        /// <summary>
        /// 查询参数
        /// </summary>
        public Dictionary<string, object> Value { get => _value; set => _value = value; }


        /// <summary>
        /// 追加查询条件
        /// </summary>
        /// <param name="filter">条件</param>
        /// <param name="relation">关系</param>
        public void Append(string filter,string relation="AND")
        {
            if (string.IsNullOrEmpty(filter))
            {
                return;
            }

            if (Filter.Length>0)
            {
                Filter += relation;
            }

            Filter += filter;

        }

        /// <summary>
        /// 添加查询参数
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        public void Add(string key,object value)
        {
            if (string.IsNullOrEmpty(key) || value==null)
            {
                return;
            }

            if (Value==null)
            {
                Value = new Dictionary<string, object>();
            }

            DicAdd(Value,key,value);
        }

        #endregion


        #region   私有方法

        /// <summary>
        /// 给容器添加信息
        /// </summary>
        /// <param name="dic">容器</param>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        private void DicAdd(Dictionary<string,object> dic,string key,object value)
        {
            if (dic==null || string.IsNullOrEmpty(key) || value==null)
            {
                return;
            }

            if (dic.ContainsKey(key))
            {
                dic[key] = value;
            }
            else
            {
                dic.Add(key,value);
            }
        }

        #endregion 


    }//Class_end

}

④实现通用sql语句接口服务的类

/***
*	Title:".NET Core WebApi" 项目
*		主题:数据库基础服务
*	Description:
*		功能:
*		    1、分页查询集合
*		    2、获取列表集合
*		    3、获取对象
*		    4、判断数据是否存在
*		    5、新增
*		    6、根据主键删除
*		    7、修改
*		    8、释放资源
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using SqlSugar;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Text;
using WebApiUtils;
using WebApiUtils.Entity;

namespace WebApiService.Common
{
    class BaseDbService<T> : IBaseDbService<T> where T : class, new()
    {
        #region   基础参数

        //数据库连接上下文
        private BaseDbContext baseDbContext;
        //数据库
        protected SqlSugarClient db;

        #endregion 


        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="dbType">数据库类型</param>
        public BaseDbService(DbType dbType)
        {
            string conStr = AppConfigHelper.GetDBStrCon(dbType.ToString());
            baseDbContext = new BaseDbContext(conStr, dbType);
            db = baseDbContext.db;
        }

        /// <summary>
        /// 分页查询集合
        /// </summary>
        /// <param name="pageIndex">当前页码</param>
        /// <param name="pageSize">当前页码大小</param>
        /// <param name="strFields">查询后显示字段(每个字段间以逗号分割)</param>
        /// <param name="filter">查询条件</param>
        /// <param name="strOrder">排序规则</param>
        /// <param name="totalCount">数据总数</param>
        /// <returns>集合</returns>
        public List<T> GetPageList(int pageIndex, int pageSize, string strFields, SqlFilterEntity filter,
            string strOrder, out int totalCount)
        {
            totalCount = 0;
            if (pageIndex<=0)
            {
                pageIndex = 1;
            }
            if (pageSize<=0)
            {
                //每页默认是10条
                pageIndex = 10;
            }

            if (string.IsNullOrEmpty(strFields))
            {
                strFields = "";
            }

            if (filter==null)
            {
                filter = new SqlFilterEntity();
            }

            if (string.IsNullOrEmpty(strOrder))
            {
                strOrder = string.Format("ID DESC");
            }

            return db.Queryable<T>().With(SqlWith.NoLock).Select(strFields).WhereIF
                (!string.IsNullOrEmpty(filter.Filter), filter.Filter, filter.Value).OrderByIF
                (!string.IsNullOrEmpty(strOrder), strOrder).ToPageList(pageIndex, pageSize, ref totalCount);

        }


        /// <summary>
        /// 获取列表集合
        /// </summary>
        /// <param name="strField">查询字段</param>
        /// <param name="filter">查询条件</param>
        /// <returns>数据集合</returns>
        public List<T> GetList(string strField, SqlFilterEntity filter)
        {
            if (string.IsNullOrEmpty(strField))
            {
                strField = "";
            }
            if (filter == null)
            {
                filter = new SqlFilterEntity();
            }
            return db.Queryable<T>().With(SqlWith.NoLock).Select(strField).WhereIF
                (!string.IsNullOrEmpty(filter.Filter), filter.Filter, filter.Value).ToList();
        }


        /// <summary>
        /// 获取开始数据
        /// </summary>
        /// <param name="top">开始条数</param>
        /// <returns>数据集合</returns>
        public List<T> GetStartList(int top = 0)
        {
            if (top > 0)
            {
                return db.Queryable<T>().With(SqlWith.NoLock).Take(top).ToList();
            }
            else
            {
                return db.Queryable<T>().With(SqlWith.NoLock).ToList();
            }
        }


        /// <summary>
        /// 获取对象
        /// </summary>
        /// <param name="strFields">查询字段串(每个字段间用逗号隔开,显示全部字段则为null)</param>
        /// <param name="filter">查询条件</param>
        /// <returns>对象</returns>
        public T GetEntity(string strFields,SqlFilterEntity filter)
        {
            if (filter != null)
            {
                return db.Queryable<T>().With(SqlWith.NoLock).Select(strFields).WhereIF
                    (!string.IsNullOrEmpty(filter.Filter), filter.Filter, filter.Value).First();
            }
            return default(T);
        }

        /// <summary>
        /// 判断数据是否存在
        /// </summary>
        /// <param name="filter">查询条件</param>
        /// <returns>执行结果(true:表示存在)</returns>
        public bool IsExists(SqlFilterEntity filter)
        {
            var result = db.Queryable<T>().With(SqlWith.NoLock).WhereIF
                (!string.IsNullOrEmpty(filter.Filter), filter.Filter, filter.Value).Count();
            return result > 0;
        }

        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="Entity">实例对象</param>
        /// <param name="ignoreColums">排除列</param>
        /// <param name="isLock">是否加锁</param>
        /// <returns>返回自增ID</returns>
        public int Insert(T entity, List<string> ignoreColumns = null, bool isLock = false)
        {
            if (ignoreColumns == null)
            {
                ignoreColumns = new List<string>();
            }
            var result = isLock ?
                db.Insertable(entity).With(SqlWith.UpdLock).IgnoreColumns(ignoreColumns.ToArray()).ExecuteReturnIdentity()
                : db.Insertable(entity).IgnoreColumns(ignoreColumns.ToArray()).ExecuteReturnIdentity();
            return result;
        }


        /// <summary>
        /// 根据主键删除
        /// </summary>
        /// <param name="primaryKeyValue">主键的值</param>
        /// <param name="isLock">是否加锁</param>
        /// <returns>执行结果(true:表示成功)</returns>
        public bool Delete(object primaryKeyValue, bool isLock = false)
        {
            var result = isLock ?
                  db.Deleteable<T>(primaryKeyValue).With(SqlWith.RowLock).ExecuteCommand() > 0
                  : db.Deleteable<T>(primaryKeyValue).ExecuteCommand() > 0;
            return result;
        }


        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="entity">实例对象</param>
        /// <param name="ignoreColumns">排除列</param>
        /// <param name="isLock">是否加锁</param>
        /// <returns>执行结果(true:表示成功)</returns>
        public bool Update(T entity, List<string> ignoreColumns = null, bool isLock = false)
        {
            if (ignoreColumns == null)
            {
                ignoreColumns = new List<string>();
            }
            var result = isLock ?
                db.Updateable(entity).With(SqlWith.UpdLock).IgnoreColumns(ignoreColumns.ToArray()).ExecuteCommand()
                : db.Updateable(entity).IgnoreColumns(ignoreColumns.ToArray()).ExecuteCommand();
            return result > 0;
        }

        /// <summary>
        /// 释放资源
        /// </summary>
        public void Dispose()
        {
            baseDbContext = null;
            db.Dispose();
        }

    }//Class_end

}

3.3.3、具体的业务逻辑

①设计业务的数据库表

 ②创建业务表的实体类

  其中创建好私有的字段属性后,可以选中所有的私有字段,然后同时按下【Ctrl+R+E】键即可一次性自动生成所有字段的公有属性内容。

  关于创建的实体中,如果你的属性名称与表中的字段不一致,则需要标识出来,具体内容请参考:从零开始 - 实体配置 - 《SqlSugar 5.0 文档》

/***
*	Title:".NET Core WebApi" 项目
*		主题:学生实体类
*	Description:
*		功能:XXX
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;

namespace WebApiEntity
{
    [SugarTable("Test_Student")]    
    public class StudentEntity
    {

        private int _iD = 0;
        private string _name = string.Empty;
        private string _number = string.Empty;
        private int _age = 0;
        private int _sex = 0;
        private string _address = string.Empty;


        /// <summary>
        /// 主键
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int ID { get => _iD; set => _iD = value; }

        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get => _name; set => _name = value; }

        /// <summary>
        /// 学号
        /// </summary>
        public string Number { get => _number; set => _number = value; }

        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get => _age; set => _age = value; }

        /// <summary>
        /// 性别
        /// </summary>
        public int Sex { get => _sex; set => _sex = value; }

        /// <summary>
        /// 家庭住址
        /// </summary>
        [SugarColumn(ColumnName = "Test_Address")]
        public string Address { get => _address; set => _address = value; }



    }//Class_end

}

③创建业务的接口服务(方便业务扩展)

/***
*	Title:".NET Core WebApi" 项目
*		主题:学生服务接口
*	Description:
*		功能:
*		
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using System;
using System.Collections.Generic;
using System.Text;
using WebApiService.Common;
using WebApiEntity;

namespace WebApiService.Interfaces
{
    public interface IStudentService : IBaseDbService<StudentEntity>
    {
        /// <summary>
        /// 测试
        /// </summary>
        void Test();

    }//Class_end

}

④实现业务服务

/***
*	Title:".NET Core WebApi" 项目
*		主题:学生服务
*	Description:
*		功能:XXX
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
using WebApiEntity;
using WebApiService.Common;
using WebApiService.Interfaces;
using WebApiUtils;

namespace WebApiService.Implements
{
    class StudentService : BaseDbService<StudentEntity>, IStudentService
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="dbType">数据类类型</param>
        public StudentService(DbType dbType=DbType.SqlServer):base(dbType)
        {

        }

        /// <summary>
        /// 测试
        /// </summary>
        public void Test()
        {
            LogHelper.Debug($"this is { this.GetType().Name} 测试");
        }
    }//Class_end

}

⑤实现具体的业务逻辑内容

/***
*	Title:".NET Core WebApi" 项目
*		主题:测试学生服务【数据库操作】
*	Description:
*		功能:XXX
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebApiEntity;
using WebApiService.Interfaces;
using WebApiUtils.Entity;

namespace WebApi_Learn.Controllers.Test
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class Test_Db_StudentService
    {
        #region   私有方法
        //学生的接口服务
        private readonly IStudentService _studentService;

        #endregion


        #region   公有方法

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="studentService">学生服务接口</param>
        public Test_Db_StudentService(IStudentService studentService)
        {
            this._studentService = studentService;
        }

        /// <summary>
        ///  插入数据
        /// </summary>
        /// <param name="studentEntity">学生实体</param>
        /// <returns>返回当前学生的ID</returns>
        [HttpPost, Route("AddInfo")]
        public ActionResult<int> Insert(StudentEntity studentEntity)
        {
            int id = _studentService.Insert(studentEntity);

            return id;
        }


        /// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="studentEntity">学生实体</param>
        /// <returns>返回修改结果</returns>
        [HttpPost, Route("UpdateInfo")]
        public ActionResult<bool> Update(StudentEntity studentEntity)
        {
            return _studentService.Update(studentEntity);
        }


        /// <summary>
        /// 删除数据(根据主键)
        /// </summary>
        /// <param name="id">主键</param>
        /// <returns></returns>
        [HttpGet]
        public ActionResult<bool> Delete(int id)
        {
            return _studentService.Delete(id, true);      
        }

        /// <summary>
        /// 查询数据(单条数据)
        /// </summary>
        /// <param name="field">过滤字段</param>
        /// <param name="fieldValue">过滤字段对应的值</param>
        /// <returns></returns>
        [HttpGet]
        public ActionResult<StudentEntity> QuaryData(string field,int fieldValue)
        {
            StudentEntity studentEntity = new StudentEntity();

            //显示字段
            string strFields = "Name,Age,Test_Address";

            //根据条件查询到数据
            SqlFilterEntity sqlFilterEntity = new SqlFilterEntity();
            sqlFilterEntity.Append($"{field}=@{field}");
            sqlFilterEntity.Add(field,fieldValue);


            studentEntity = _studentService.GetEntity(strFields, sqlFilterEntity);

            return studentEntity;
        }

        /// <summary>
        /// 查询数据(多条数据)
        /// </summary>
        /// <param name="field">字段</param>
        /// <param name="fieldValue">字段对应的值</param>
        /// <returns></returns>
        [HttpGet]
        public ActionResult<List<StudentEntity>> QuaryDatas(string field, string fieldValue)
        {
            List<StudentEntity> studentEntityList = new List<StudentEntity>();

            //根据条件查询到数据
            SqlFilterEntity sqlFilterEntity = new SqlFilterEntity();
            sqlFilterEntity.Append($"{field}=@{field}");
            sqlFilterEntity.Add(field, fieldValue);
            studentEntityList= _studentService.GetList(null, sqlFilterEntity);

           return studentEntityList;
        }

        /// <summary>
        /// 获取开始数据
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public List<StudentEntity> GetStartDatas()
        {
            List<StudentEntity> studentEntities = new List<StudentEntity>();
            return _studentService.GetStartList(2);
           
        }

        /// <summary>
        /// 分页查看
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="strOrder"></param>
        /// <returns></returns>
        [HttpPost]
        public List<StudentEntity> GetPageList(int pageIndex, int pageSize,
            string strOrder="Age DESC")
        {
            //显示字段
            string strField = "ID,Name,Age";

            //过滤条件
            SqlFilterEntity sqlFilterEntity = new SqlFilterEntity();
            sqlFilterEntity.Append($"Age>@Age");
            sqlFilterEntity.Add("Age", 21);

            int totalCount=0;

            return _studentService.GetPageList(pageIndex,pageSize, strField, sqlFilterEntity,strOrder,out totalCount);

        }

        #endregion



    }//Class_end
}

3.3.4、服务的依赖注入

  主要实现统一管理业务的接口与实现服务的对应关系。

/***
*	Title:".NET Core WebApi" 项目
*		主题:服务的依赖注入
*	Description:
*		功能:XXX
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Text;
using WebApiService.Implements;
using WebApiService.Interfaces;

namespace WebApiService.Common.Depends
{
    public class ServiceInjection
    {
        public static void ConfigureRepository(IServiceCollection services)
        {
            services.AddSingleton<IStudentService, StudentService>();

        }

    }//Class_end

}

对于依赖注入的简要补充如下所示:

方法说明
Transient每一次调用都会创建一个新的实例
Scoped一个作用域中只实例化一个
Singleton整个应用程序生命周期以内只创建一个实例

①在Startup类中【ConfigureServices】方法中注册【服务的依赖注入】

 3.3.5、运行程序执行测试

比如:只显示【名称,年龄、地址】内容,查看条件是【字段为:ID;且该ID字段的值为:2021003165】信息:

 参考文章:

net core Webapi基础工程搭建(六)——数据库操作_Part 1

net core Webapi基础工程搭建(六)——数据库操作_Part 2

很高兴回答您的问题!您想了解的是关于使用.NET Core WebAPI开发网上书店的相关内容吗? 使用.NET Core WebAPI可以很方便地构建一个基于HTTP协议的API,用于处理网上书店的业务逻辑。下面是一些可能有用的步骤和建议: 1. 创建项目:首先,您可以使用Visual Studio或者命令行工具来创建一个新的.NET Core WebAPI项目。 2. 定义模型:根据您的需求,确定需要的数据模型,例如书籍、订单、用户等。使用C#定义这些模型,并在数据库创建相应的表格。 3. 配置数据库:使用Entity Framework Core或者其他ORM工具来连接数据库,并配置数据库连接字符串。您可以选择使用关系型数据库,如SQL Server、MySQL,或者非关系型数据库,如MongoDB。 4. 实现控制器:创建控制器类来处理API请求,并实现相应的动作方法。例如,添加书籍、获取书籍列表、下订单等。在方法,您可以使用依赖注入来获取服务实例,如书籍管理、订单处理等。 5. 安全认证和授权:根据需求,您可以添加身份验证和授权机制来保护API资源。例如,使用JWT(Json Web Token)来对用户进行认证,使用角色或策略来限制访问权限。 6. 编写API文档:为了方便其他开发者使用您的API,您可以使用Swagger等工具来生成和展示API文档。文档包含API的接口定义、请求/响应示例等信息。 7. 部署和测试:最后,您可以将API部署到云服务器或者其他托管平台上,并进行测试。您可以使用Postman或其他API测试工具来发送请求,并验证API的功能和性能。 当然,以上只是一个简单的指南,具体的实现细节还需要根据您的需求和项目的特点来进行调整和扩展。希望对您有所帮助!如果您有更多的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

牛奶咖啡13

我们一起来让这个世界有趣一点…

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

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

打赏作者

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

抵扣说明:

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

余额充值