一、实现效果
二、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】信息:
参考文章: