栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.net 6基本封装使用Dapper,Mysql,sql server数据库

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.net 6基本封装使用Dapper,Mysql,sql server数据库

  1. 安装NuGet包:Dapper和MySql.Data,如果是sql server数据库则安装System.Data.SqlClient
  2. 新建Dapper文件夹,里面新建BaseDBContext上下文类

    代码内容:
using MySql.Data.MySqlClient;
using System.Data;
using System.Data.SqlClient;

namespace WebApplication1.Dapper
{
    public class BaseDBContext
    {
        private string connectionString;
        public IDbConnection Connection { get; set; }
        //mysql数据库
        public BaseDBContext(string settings)
        {
            connectionString = settings;
            Connection = new MySqlConnection(connectionString);
        }
        //sql server数据库
        //public BaseDBContext(string settings)
        //{
        //    connectionString = settings;
        //    Connection = new SqlConnection(connectionString);
        //}

    }
}

  1. 新建Models文件夹,在里面新建一个表类:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace WebApplication1.Models
{
    public class City
    {
        [Key]
        public int Id { get; set; }
        [Column(TypeName = "nvarchar(100)")]
        public string Name { get; set; }

        [Column(TypeName = "nvarchar(100)")]
        public string AreaCode { get; set; }
    }
}

在数据库也准备属性表名一样的表:

4. 新建接口文件夹IRepository用于存放接口,新建IBaseRepository类,封装基础增删改查:

namespace WebApplication1.IRepository
{
    public interface IBaseRepository 
    {
        Task Insert(T entity, string insertSql);

        Task Update(T entity, string updateSql);

        Task Delete(int Id, string deleteSql);

        Task> SelectAsync(string selectSql);

        Task GetOne(int Id, string selectOneSql);

        Task> GetList(int Id, string selectSql);
    }
}

再新建ICityRepository表接口类,继承IBaseRepository:

using WebApplication1.Models;

namespace WebApplication1.IRepository
{
    public interface ICityRepository:IBaseRepository
    {
        //查询所有数据
        public Task> query();
    }
}
  1. 新建实现接口的文件夹Repository用于存放实现接口的类,在下面新建两个类BaseRepository,CityRepository用于实现刚才声明的接口

    BaseRepository继承IBaseRepository,实现IBaseRepository的接口,代码如下:
using Dapper;
using System.Data;
using WebApplication1.Dapper;
using WebApplication1.IRepository;

namespace WebApplication1.Repository
{
    public class BaseRepository : IBaseRepository where T : class, new()
    {
        public BaseDBContext _baseDB;
        public BaseRepository(BaseDBContext baseDB)
        {
            _baseDB = baseDB;
        }
        public async Task Delete(int Id, string deleteSql)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                await dbConnection.ExecuteAsync(deleteSql, new { Id = Id });
            }
        }

        public async Task GetOne(int Id, string selectOneSql)
        {

            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                var result = await dbConnection.QueryFirstOrDefaultAsync(selectOneSql, new { Id = Id });
                return result;
            }
        }
        public async Task> GetList(int Id, string selectSql)
        {

            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                return await Task.Run(() => dbConnection.Query(selectSql, new { Id = Id }).ToList());
            }
        }
        public async Task Insert(T entity, string insertSql)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                await dbConnection.QueryFirstOrDefaultAsync(insertSql, entity);
            }
        }

        public async Task> SelectAsync(string selectSql)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                return await Task.Run(() => dbConnection.Query(selectSql).ToList());
            }
        }

        public async Task Update(T entity, string updateSql)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                await dbConnection.ExecuteAsync(updateSql, entity);
            }
        }

        public async Task> GetByDynamicParams(string sqlText, DynamicParameters dynamicParams)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                return await Task.Run(() => dbConnection.Query(sqlText, dynamicParams).ToList());
            }
        }
    }
}

CityRepository继承ICityRepository,实现ICityRepository的接口,代码如下:

using Dapper;
using System.Data;
using WebApplication1.Dapper;
using WebApplication1.IRepository;
using WebApplication1.Models;

namespace WebApplication1.Repository
{
    public class CityRepository : BaseRepository, ICityRepository
    {
        public BaseDBContext _baseDB;
        public CityRepository(BaseDBContext baseDB) : base(baseDB)
        {
            _baseDB = baseDB;
        }
        public async Task> query()
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                return await Task.Run(() => dbConnection.Query("select * from City").ToList());
            }
        }
    }
}

  1. 在appsettings.json中添加数据库连接字符串,下面我用的是mysql的连接串:
"ConnectionStrings": {
    "DbConnectionString": " Data Source=localhost;Database=efcodetest;AllowLoadLocalInfile=true;User ID=root;Password=123456;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;"
  }


6. 依赖注入,在Program.cs里面添加刚才声明实现几个类的依赖注入:

builder.Services.AddSingleton(sp => new BaseDBContext(
    builder.Configuration.GetConnectionString("DbConnectionString")
));

builder.Services.AddScoped();


7. 新建api测试:

代码:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WebApplication1.IRepository;

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CityController : ControllerBase
    {
        private ICityRepository Repository;
        public CityController(ICityRepository _repository)
        {
            Repository = _repository;
        }
        [HttpGet("query")]
        public async Task query() => await Repository.query();
    }
}

 

请求结果和数据库对比:

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号