namespace Toolkit
{
using LevelDB;
using System;
using System.Web;
using Newtonsoft.Json;
public class LevelDbHelper<T> : IDisposable where T : class
{
/// <summary>
/// 当前操作表名,必须在生成目录下有leveldb.dll文件
/// </summary>
public string ModelName { get; private set; }
public string ErrMsg { get; private set; }
DB _database;
/// <summary>
/// 构造函数
/// <para>设置项目自动拷贝leveldb.dll文件方法</para>
/// <para>1.将leveldb.dll拷贝到项目工程下的packages目录内</para>
/// <para>2.项目右键->属性->生成事件->后期生成事件命令行</para>
/// <para>3.粘贴如下代码:</para>
/// <example>Copy "$(SolutionDir)packages\leveldb.dll" "$(ProjectDir)$(OutDir)"</example>
/// </summary>
public LevelDbHelper()
{
ModelName = typeof(T).ToString();
ErrMsg = null;
}
#region 公共方法
/// <summary>
/// 开启数据库,需要预先指定levelDB.dll位置
/// </summary>
public bool Open()
{
bool res;
try
{
_database = DB.Open(new Options { CreateIfMissing = true }, ModelName);
res = true;
}
catch (Exception e)
{
ErrMsg = e.Message;
res = false;
}
return res;
}
/// <summary>
/// 释放数据库资源
/// </summary>
public void Dispose()
{
ModelName = null;
ErrMsg = null;
_database.Dispose();
}
/// <summary>
/// 写入数据
/// </summary>
/// <param name="key">索引主键</param>
/// <param name="value">存储数值</param>
public void Set(object key, T value)
{
var data = JsonConvert.SerializeObject(
value,
new JsonSerializerSettings
{
DateFormatString = "HH:mm:ss",
DefaultValueHandling = DefaultValueHandling.Ignore
});
_database.Put(new WriteOptions { Sync = true }, key.ToString(), data);
}
/// <summary>
/// 获取数据
/// </summary>
/// <param name="key">索引主键</param>
/// <returns>返回:存储数值</returns>
public T Get(object key)
{
T data;
try
{
var value = _database.Get(new ReadOptions(), key.ToString());
data = JsonConvert.DeserializeObject<T>(value);
}
catch
{
data = null;
}
return data;
}
/// <summary>
/// 删除数据
/// </summary>
/// <param name="key">索引主键</param>
public void Delete(object key) => _database.Delete(key.ToString());
#endregion
#region 静态辅助方法
/// <summary>
/// 路径映射,可将任意工程(cs或bs)逻辑路径映射为物理路径
/// </summary>
/// <param name="strPath">相对路径字符串</param>
/// <returns></returns>
public static string MapPath(string strPath)
{
string path;
if (HttpContext.Current != null)
{
path = HttpContext.Current.Server.MapPath(strPath);
}
else
{
strPath = strPath.Replace("/", "\\");
if (strPath.StartsWith("\\"))
{
strPath = strPath.TrimStart('\\');
}
path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
}
return path;
}
#endregion
}
}
LevelDbHelper.cs
最新推荐文章于 2022-04-09 16:29:09 发布