写了一个简单的基于EntityQuery的 PDF.NET SOD CURD 帮助类,以后使用再继续扩展。
其中的引用 using Cxw.Common; 是缓存类的程序集,有用的该类的请自行替换。
CURDHelper.cs:
using System;
using System.Linq;
using System.Collections.Generic;
using PWMIS.DataMap.Entity;
using PWMIS.DataProvider.Adapter;
using PWMIS.Core.Extensions;
using Cxw.Common;
namespace BLL
{
public class CURDHelper<T> where T : EntityBase, new()
{
static PWMIS.DataProvider.Data.AdoHelper db
{
get { return MyDB.GetDBHelper(); }
}
#region 基础操作
/// <summary>
/// 插入一条数据
/// </summary>
/// <param name="entity">实体类</param>
/// <param name="dirDB">AdoHelper实例</param>
/// <returns></returns>
public static bool Insert(T entity, PWMIS.DataProvider.Data.AdoHelper dirDB = null)
{
EntityQuery<T> query = new EntityQuery<T>(dirDB ?? db);
return query.Insert(entity) > 0;
}
/// <summary>
/// 更新一条数据
/// </summary>
/// <param name="entity">实体类</param>
/// <param name="dirDB">AdoHelper实例</param>
/// <returns></returns>
public static bool Update(T entity, PWMIS.DataProvider.Data.AdoHelper dirDB = null)
{
EntityQuery<T> query = new EntityQuery<T>(dirDB ?? db);
return query.Update(entity) > 0;
}
/// <summary>
/// 删除一条数据
/// </summary>
/// <param name="entity">实体类</param>
/// <param name="dirDB">AdoHelper实例</param>
/// <returns></returns>
public static bool Delete(T entity, PWMIS.DataProvider.Data.AdoHelper dirDB = null)
{
EntityQuery<T> query = new EntityQuery<T>(dirDB ?? db);
return query.Delete(entity) > 0;
}
/// <summary>
/// 保存一条数据
/// </summary>
/// <param name="entity">实体类</param>
/// <param name="dirDB">AdoHelper实例</param>
/// <returns></returns>
/// <remarks>该方法会自动探测实体对象是新增的还是修改的,如果要求较快速度,请调用Insert或者Update方法</remarks>
public static bool Save(T entity, PWMIS.DataProvider.Data.AdoHelper dirDB = null)
{
EntityQuery<T> query = new EntityQuery<T>(dirDB ?? db);
query.CurrentEntity = entity;
return query.SaveAllChanges() > 0;
}
/// <summary>
/// 得到一个实体对象
/// </summary>
/// <param name="primaryKeys">单主键名</param>
/// <param name="id">单主键</param>
/// <returns></returns>
public static T GetEntity<U>(string primaryKey, U id)
{
T entity = new T();
entity[primaryKey] = id;
return EntityQuery<T>.Fill(entity) ? entity : null;
}
/// <summary>
/// 得到一个实体对象
/// </summary>
/// <param name="primaryKeys">键值列表</param>
/// <param name="ids">值列表</param>
/// <returns></returns>
public static T GetEntity<U>(string[] primaryKeys, U[] ids)
{
if (primaryKeys.Length != ids.Length)
{
throw new ArgumentException("实体类的主键字段列表与值列表数量不匹配!");
}
T entity = new T();
for(var i=0;i< primaryKeys.Length; i++)
{
entity[primaryKeys[i]] = ids[i];
}
return EntityQuery<T>.Fill(entity) ? entity : null;
}
/// <summary>
/// 获取所有实体列表
/// </summary>
public static List<T> GetAllList()
{
return OQL.From<T>().Select().END.ToList();
}
#endregion 基础操作
#region 缓存
#region 实体缓存
/// <summary>
/// 从实体缓存得到一个实体对象
/// </summary>
/// <param name="cacheKey">缓存键</param>
/// <param name="primaryKeys">单主键名</param>
/// <param name="id">单主键</param>
/// <returns>实体对象或null</returns>
public static T GetCacheEntity<U>(string cacheKey, string primaryKey, U id)
{
cacheKey += id.ToString();
T entity = Cxw.Common.CacheHelper.Instance.GetOrDefault<T>(cacheKey);
if (entity.IsNullOrDBNull() && !(entity = GetEntity(primaryKey, id)).IsNullOrDBNull())
{
Cxw.Common.CacheHelper.Instance.Insert(cacheKey, entity);
}
return entity;
}
#endregion 实体缓存
#region 列表缓存
/// <summary>
/// 从列表缓存得到一个实体对象
/// </summary>
/// <param name="id">主键</param>
/// <returns>实体对象或null</returns>
public static T GetEntityFromCacheList<U>(string cacheKey, string primaryKey, object id)
{
return GetCacheList(cacheKey)?.FirstOrDefault(c => c[primaryKey] == id) ?? null;
}
/// <summary>
/// 从列表缓存得到一个实体对象
/// </summary>
/// <param name="id">主键</param>
/// <returns>实体对象或null</returns>
public static T GetEntityFromCacheList<U>(string cacheKey, string[] primaryKeys, object[] ids)
{
return GetCacheList(cacheKey)?.FirstOrDefault(c =>
{
for (var i = 0; i < primaryKeys.Length; i++)
{
if (!(c[primaryKeys[i]] == ids[i])) return false;
}
return true;
}) ?? null;
}
/// <summary>
/// 从缓存得到一个实体对象列表,没有结果则返回new List<T>()
/// </summary>
/// <param name="cacheKey">缓存键</param>
/// <returns>List<T></returns>
public static List<T> GetCacheList(string cacheKey)
{
List<T> lst = Cxw.Common.CacheHelper.Instance.GetOrDefault<List<T>>(cacheKey);
if (lst.IsNullOrDBNull())
{
lst = OQL.From<T>().Select().END.ToList();
if (lst.Count > 0)
{
Cxw.Common.CacheHelper.Instance.Insert(cacheKey, lst);
}
else
{
Cxw.Common.CacheHelper.Instance.Remove(cacheKey);
}
}
return lst;
}
#endregion 列表缓存
#endregion 缓存
}
}
/// <param name="dirDB">AdoHelper实例</param>
/// <param name="dirDB">AdoHelper实例</param>
/// <param name="dirDB">AdoHelper实例</param>