版本

🔗 NuGet

.NET 6

Pan.Utils 0.0.1

.NET 4.7.2

Pan.Utils472 0.0.1


Util(工具)

PConvert

PExpression

表达式解析类

方法

GetMemberName

获取表达式成员名称

public static string GetMemberName(Expression expression)

expression - 表达式


PReflection

反射类

方法

GetValueByProperty

根据属性名称反射获取实例该属性的值

public static object GetValueByProperty(object data, string propertyName)

data - 实例对象

propertyName - 属性名称


GetValueByProperties

反射获取实例所有属性及该属性的值

public static Dictionary<string, object> GetValueByProperties(object data)

data - 实例对象


GetPropertiesName

反射获取实例所有属性名称

public static List<string> GetPropertiesName(object data)
public static List<string> GetPropertiesName(Type type)

data - 实例对象

type - 类型


SetValueByProperty

根据属性名称设置实例该属性的值

public static void SetValueByProperty(object data, string propertyName, object value)

data - 实例对象

propertyName - 属性名称

value - 属性值


SetValueByProperties

反射设置实例的属性值

public static void SetValueByProperties(object data, Dictionary<string, object> dict)

data - 实例对象

dict - 属性数据字典



Config(配置)


Data(数据)

使用示例

对 SQLServer 的增删改查操作

  1. 有表结构如下
CREATE TABLE dbo.[User]
(
    Id         UNIQUEIDENTIFIER NOT NULL PRIMARY KEY NONCLUSTERED, -- 唯一键
    Name       NVARCHAR(50)     NOT NULL,                          -- 名称
    Remark     NVARCHAR(500)    NULL,                              -- 备注
    CreateDate DATETIME         NULL
        DEFAULT (GETDATE()), -- 创建日期
);
  1. 有模型如下
class User
{
    public Guid Id { get; set; } = Guid.NewGuid();
    public string Name { get; set; } = "Pan";
    public string Remark { get; set; } = "备注";
    public override string ToString()
    {
        return $"Id:[{Id}]; Name:[{Name}]; Remark:[{Remark}]";
    }
}
  1. 插入操作
/// <summary>
/// 测试插入
/// </summary>
static void Test_DBInsert()
{
    // 构建上下文,MSSQLServer访问器,启用事务
    using (IDBContext db = DBO.NewDBContext(new MSSQLDBProvider()).UseTransaction(true))
    {
        try
        {
            // 无实例插入
            db.Insert("dbo.[User]")
                .Column("Id", Guid.NewGuid())
                .Column("Name", "Pan")
                .Column("Remark", "无实例插入")
                .Execute();

            User user = new User()
            {
                Remark = "有实例插入"
            };
            // 有实例插入
            db.Insert("dbo.[User]", user)
                .AutoMap()
                .Execute();

            // 有实例插入(忽略自动映射部分字段)
            db.Insert("dbo.[User]", user)
                .Column("Id", Guid.NewGuid())
                .Column("Remark", "有实例插入(忽略自动映射部分字段)")
                .AutoMap(x => x.Id, x => x.Remark)
                .Execute();

            db.Commit();
        }
        catch (Exception ex)
        {
            System.Console.WriteLine(ex.ToString());
            db.Rollback();
        }
    }
}
  1. 更新操作
/// <summary>
/// 测试更新
/// </summary>
static void Test_DBUpdate()
{
    // 构建上下文,MSSQLServer访问器,启用事务
    using (IDBContext db = DBO.NewDBContext(new MSSQLDBProvider()).UseTransaction(true))
    {
        try
        {
            // 无实例更新
            db.Update("dbo.[User]")
                .Column("Name", "Pan_Update")
                .Column("Remark", "无实例更新")
                .Execute();

            User user = new User()
            {
                Remark = "有实例更新(忽略自动映射部分字段)"
            };

            // 有实例更新(忽略自动映射部分字段)
            db.Update("dbo.[User]", user)
                .AutoMap(x => x.Id)
                .Execute();

            // 带条件
            db.Update("dbo.[User]", user)
                .AutoMap(x => x.Id)
                .Where("Name", "Pan")
                .Execute();

            // 带条件(复杂、特殊条件)
            db.Update("dbo.[User]", user)
                .AutoMap(x => x.Id)
                .WhereString("Name = @Where_Name OR Remark = @Where_Remark", new
                             {
                                 Where_Name = "Pan",
                                 Where_Remark = ""
                             })
                .Execute();

            db.Commit();
        }
        catch (Exception ex)
        {
            System.Console.WriteLine(ex.ToString());
            db.Rollback();
        }
    }
}
  1. 删除操作
/// <summary>
/// 测试删除
/// </summary>
static void Test_DBDelete()
{
    // 构建上下文,MSSQLServer访问器,启用事务
    using (IDBContext db = DBO.NewDBContext(new MSSQLDBProvider()).UseTransaction(true))
    {
        try
        {
            // 无实例删除
            db.Delete("dbo.[User]")
                .Execute();

            User user = new User();

            // 带条件(无实例)
            db.Delete("dbo.[User]")
                .Where("Name", "Pan")
                .Execute();

            // 带条件(有实例)
            db.Delete("dbo.[User]", user)
                .Where(x => x.Name)
                .Execute();

            // 带条件(复杂、特殊条件)
            db.Delete("dbo.[User]", user)
                .WhereString("Name = @Where_Name OR Remark = @Where_Remark", new
                             {
                                 Where_Name = "Pan",
                                 Where_Remark = ""
                             })
                .Execute();

            db.Commit();
        }
        catch (Exception ex)
        {
            System.Console.WriteLine(ex.ToString());
            db.Rollback();
        }
    }
}
  1. 查询操作
/// <summary>
/// 测试查询
/// </summary>
static void Test_DBSelect()
{
    // 构建上下文,MSSQLServer访问器
    using (IDBContext db = DBO.NewDBContext(new MSSQLDBProvider()))
    {
        try
        {
            // 单个查询
            User user = db.Select<User>("Id, Name, Remark, CreateDate").From("dbo.[User]")
                .Where("Name", "Pan").QuerySingle();
            System.Console.WriteLine($"单个查询:{user}");

            // 多个查询
            List<User> users = db.Select<User>("Id, Name, Remark, CreateDate").From("dbo.[User]")
                .Where("Name", "Pan").QueryMany();
            foreach (var u in users)
                System.Console.WriteLine($"多个查询:{u}");

            // 带条件查询使用同更新、删除操作... 此处不展示
        }
        catch (Exception ex)
        {
            System.Console.WriteLine(ex.ToString());
        }
    }
}
  1. SQL操作
/// <summary>
/// 测试SQL查询
/// </summary>
static void Test_DBSql()
{
    // 构建上下文,MSSQLServer访问器
    using (IDBContext db = DBO.NewDBContext())
    {
        try
        {
            int count = db.Sql("SELECT COUNT(1) FROM dbo.[User] WHERE Name = @Name").Parameter("Name", "Pan")
                .QuerySingle<int>();
            System.Console.WriteLine($"记录个数:[{count}]");
        }
        catch (Exception ex)
        {
            System.Console.WriteLine(ex.ToString());
        }
    }
}

DBO

数据库操作对象

方法

NewDBContext

新建数据库上下文

public static IDBContext NewDBContext();
public static IDBContext NewDBContext(IDBProvider provider);

provider - 数据库访问器


IDBContext

数据库上下文

属性

Data

上下文数据

DBContextData Data { get; }

方法

UseTransaction

是否启用事务

IDBContext UseTransaction(bool isUse);

isUse - 是否启用


Commit

提交事务

void Commit();

Rollback

回滚事务

void Rollback();

Insert

IDBInsertBuilder Insert(string tableName);
IDBInsertBuilder<T> Insert<T>(string tableName, T data);

tableName - 表名

data - 数据


Delete

IDBDeleteBuilder Delete(string tableName);
IDBDeleteBuilder<T> Delete<T>(string tableName, T data);

tableName - 表名

data - 数据


Update

IDBUpdateBuilder Update(string tableName);
IDBUpdateBuilder<T> Update<T>(string tableName, T data);

tableName - 表名

data - 数据


Select

IDBSelectBuilder Select(string columns);
IDBSelectBuilder Select(List<string> columns);
IDBSelectBuilder<T> Select<T>(string columns);

columns - 字段


Sql

SQL查询

IDBSqlBuilder Sql(string sql);
IDBSqlBuilder Sql(string sql, dynamic data);

sql - SQL语句

data - 参数对象



Logger(日志)


Web(Service/API)


WinForm(桌面)