.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"]));
原理其实和三层架构很想,后面的自己可以摸索摸索一下,希望对你有所帮助,感谢你的观看。