版本
🔗 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 的增删改查操作
- 有表结构如下
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()), -- 创建日期
);
- 有模型如下
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}]";
}
}
- 插入操作
/// <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();
}
}
}
- 更新操作
/// <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();
}
}
}
- 删除操作
/// <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();
}
}
}
- 查询操作
/// <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());
}
}
}
- 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- 参数对象