.Net Core通过原生T-SQL语句进行操作封装DBHelper类

.Net Core通过原生T-SQL语句进行操作封装DBHelper类(支持存储过程操作)

.Net Core 开发存在的问题

相信使用.Net Core进行项目开发的都知道,绝大部分人会使用EFCo来进行连接数据库进行操作,因为它使用起来方便快捷。配置起来也很简单,设计好数据库并通过 程序包管理控制台 输入命令行 进而生成 数据迁移文件。

//1、添加包
EntityFrameworkCore.SqlServer
EntityFrameworkCore.Tools

//2、打开程序包管理器控制台   (工具 - Nuget 包管理器 - 程序包管理器控制台)
//  Models(生成的文件名称)
Scaffold-DbContext "数据库连接名称" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

// -F 指的是重新生成最新数据库结构
Scaffold-DbContext "数据库连接名称" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models  -F

不知道你们用EFCore有没有发现一个问题,就是你修改一个字段时,你不能像简单的T-SQL语句那样单独的修改对应的字段,而是把所有的字段全部查询出来,然后把需要修改的数据给替换掉。这样就有点狗血了,对于数据量小的项目其实还是可以应付的,对于数据量大的项目而言,那就另当别论了。所以我觉得还是用原生的T-SQL语句来实现会解决这种数据量大的问题。

///  1、添加包
///  Microsoft.Extensions.Configuration
///	 System.Data.SqlClient	
public class DbHelper
{
    private readonly IConfiguration _configuration;
    public DbHelper(IConfiguration configuration)
    {
        _configuration = configuration;
    }

	//  _configuration.GetSection("DB:ConnectionString").Value --在配置文件获取 数据连接字符串

    /// <summary>
    /// 查询 (T-SQL 或者 存储过程)
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="para"></param>
    /// <param name="cmdtype">Command类型  Text --执行T-sql  /  StoredProcedure -- 执行 存储过程   </param>
    /// <returns></returns>
    public DataTable Selected(string sql, SqlParameter[] para, CommandType cmdtype)
    {
        try
        {
            //实例化适配器
            SqlDataAdapter dap = new SqlDataAdapter(sql, _configuration.GetSection("DB:ConnectionString").Value);
            dap.SelectCommand.CommandType = cmdtype;  
            if (para != null)
            {
                dap.SelectCommand.Parameters.AddRange(para);
            }
            DataTable dt = new DataTable();
            dap.Fill(dt);
            return dt;
        }
        catch (Exception)
        {

            throw;
        }
    }

    /// <summary>
    /// 增删改 (T-SQL 或者 存储过程)
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="para"></param>
    /// <param name="cmdtype">Command类型  Text --执行T-sql  /  StoredProcedure -- 执行 存储过程   </param>
    /// <returns></returns>
    public bool Updated(string sql, SqlParameter[] para,CommandType cmdtype)
    {
        using (SqlConnection conn = new SqlConnection(_configuration.GetSection("DB:ConnectionString").Value))
        {
            try
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                SqlCommand cm = new SqlCommand(sql, conn);
                cm.CommandType = cmdtype;
                if (para != null)
                {
                    cm.Parameters.AddRange(para);
                }
                int i = cm.ExecuteNonQuery();
                return i > 0;
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}

还需要注册一下服务,这个千万不要忘了

//注册 连接数据库服务 DBHelper 
// builder.Configuration["DB:SqlConfig"] >>  System.Data.SqlClient 
DbProviderFactories.RegisterFactory(builder.Configuration["DB:SqlConfig"], System.Data.SqlClient.SqlClientFactory.Instance);

// 连接数据库 EFcore
builder.Services.AddDbContext<DBContext>(n => n.UseSqlServer(builder.Configuration.GetSection("DB")["ConnectionString"]));

原理其实和三层架构很想,后面的自己可以摸索摸索一下,希望对你有所帮助,感谢你的观看。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值