src/Library/NetPro.Dapper/Expressions/DapperSmartAsync.cs
(开头部分) 31KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NetPro.Dapper.Expressions
{
/// <summary>
/// DapperSmart异步方法扩展
/// </summary>
public static partial class DapperSmart
{
/// <summary>
/// <para>By default queries the table matching the class name asynchronously </para>
/// <para>-Table name can be overridden by adding an attribute on your class [Table("YourTableName")]</para>
/// <para>By default filters on the Id column</para>
/// <para>-Id column name can be overridden by adding an attribute on your primary key property [Key]</para>
/// <para>Supports transaction and command timeout</para>
/// <para>Returns a single entity by a single id from table T</para>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="connection"></param>
/// <param name="id"></param>
/// <param name="transaction"></param>
/// <param name="commandTimeout"></param>
/// <returns>Returns a single entity by a single id from table T.</returns>
public static async Task<T> QueryAsync<T>(this IDbConnection connection, object id, IDbTransaction transaction = null, int? commandTimeout = null)
{
var currenttype = typeof(T);
var idProps = GetIdProperties(currenttype).ToList();
if (!idProps.Any())
throw new ArgumentException("Get<T> only supports an entity with a [Key] or Id property");
var name = GetTableName(currenttype);
var sb = new StringBuilder();
sb.Append("Select ");
//create a new empty instance of the type to get the base properties
BuildSelect(sb, GetScaffoldableProperties<T>().ToArray());
sb.AppendFormat(" from {0} where ", name);
for (var i = 0; i < idProps.Count; i++)
{
if (i > 0)
sb.Append(" and ");
sb.AppendFormat("{0} = @{1}", GetColumnName(idProps[i]), idProps[i].Name);
}
var dynParms = new DynamicParameters();
if (idProps.Count == 1)
dynParms.Add("@" + idProps.First().Name, id);
else
{
foreach (var prop in idProps)
dynParms.Add("@" + prop.Name, id.GetType().GetProperty(prop.Name).GetValue(id, null));
}
后面还有 591 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。