DotNet相关
笔记:如何使用 Entity Framework Core
独孤求败 发表于2026-01-25 浏览49 评论0
前言#
在本篇文章中,着重介绍如何使用 Entity Framework Core,不过多涉及底层细节。
Entity Framework Core(简称 EF Core)是微软为.NET 平台打造的轻量级、跨平台对象关系映射(ORM)框架,以编写 C# 对象代码的方式操作各类数据库,无需大量手写原生 SQL 语句。
DotNet相关
DotNet10极简数据库对象关系映射
独孤求败 发表于2026-01-25 浏览30 评论0
有时候不想使用EF等ORM框架,想要实现的功能也简单,就是获取一条或者多条记录,于是自己折腾了一个,代码如下:
public class SqlFetch
{
private readonly string _ConnectionString;
/// <summary>
/// 获取数据库连接字符串
/// </summary>
/// <param name="config"></param>
public SqlFetch(IConfiguration config)
{
_ConnectionString = config.GetSection(SectionConsts.ConnectionString).Get<string>()!;
}
/// <summary>
/// 获取多条记录
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="commandText"></param>
/// <param name="func"></param>
/// <returns></returns>
public Task<List<T>> ToListAsync<T>(string commandText, Func<IDataReader, T> func) => ToListAsync(commandText, [], func);
/// <summary>
/// 获取多条记录,带参数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="commandText"></param>
/// <param name="paras"></param>
/// <param name="func"></param>
/// <returns></returns>
public async Task<List<T>> ToListAsync<T>(string commandText, List<SqlParameter> paras, Func<IDataReader, T> func)
{
var items = new List<T>();
var cn = new SqlConnection(_ConnectionString);
var cmd = cn.CreateCommand();
cmd.CommandText = commandText;
if (paras.Count > 0)
cmd.Parameters.AddRange(paras.ToArray());
await cn.OpenAsync();
var dr = await cmd.ExecuteReaderAsync();
while (await dr.ReadAsync())
items.Add(func(dr));
await dr.CloseAsync();
await cn.CloseAsync();
return items;
}
/// <summary>
/// 获取单条记录
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="commandText"></param>
/// <param name="func"></param>
/// <returns></returns>
public async Task<T?> SingleOrDefaultAsync<T>(string commandText, Func<IDataReader, T> func)
{
var cn = new SqlConnection(_ConnectionString);
var cmd = cn.CreateCommand();
cmd.CommandText = commandText;
await cn.OpenAsync();
var dr = await cmd.ExecuteReaderAsync();
try
{
if (await dr.ReadAsync())
return func(dr);
else
return default;
}
finally
{
await dr.CloseAsync();
await cn.CloseAsync();
}
}
}