C#里的轻量级数据库LiteDB

原创
2020/04/02 18:13
阅读数 2.8K

近期在找一个方便好用的serverless数据库,工作中有很多场景能用上,前一个项目用了SQLite发现不用给客户安装数据库真舒服。

应用场景特点主要包括:

  • 安装量大
  • 数据量小(10万左右的记录没啥影响?没仔细测试过)
  • 读写频率不高

年前找到LiteDB这个项目(等过年特别闲),发现已经开源十几年了。C#上岗才学的,虽然也用了两年了,啥都不知道。 不过近期项目没用上,所以弄了个MakeDown浏览器(MDKM)用来帮自己熟悉LiteDB,顺便帮自己做个小工具,还挺好用(自卖自夸)。

写MD方面的html显示时参考了MarkDownMonster,还扒他一套的CSS文件(仅学习研究使用)。

LiteDB是一个全由C#开发,类似SQLite的单文件数据库,无需安装数据服务即可使用。

仅在C#上使用可以考虑替代SQLite。NuGet上就能获取。

下面大概总结一些使用的代码,使用基本没碰到什么坑没什么好写的,可能这就是我不知道LiteDB的原因吧。

创建或链接数据库文件

//链接字符串可以直接是文件地址,也可以和其它数据库一样以{key}={value};的结构组成链接语句,详细见LiteDB的维基
string connectionString = AppDomain.CurrentDomain.BaseDirectory + "Data.db";
using (LiteDB.LiteDatabase db = new LiteDB.LiteDatabase(connectionString))
{
    //这里可以对db对象做任何操作
    //...

    //完成操作
    db.Commit();
}

实体类型和增删改查

由于LiteDB就是C#开发的,所以它支持所有常用的C#基本类型或基本类型组成的类。

LiteDB采用CodeFirst方式。

//定义一个类型
public class MyEntity
{
    //ObjectId是LiteDB定义的一个主键默认类型
    //`_id`是默认主键的字段名称
    //如果没有声明也会自动添加
    //public ObjectId _id { get; set; }
    public string Content { get; set; }
}

增删改查操作

//增删改查
using (LiteDB.LiteDatabase db = new LiteDB.LiteDatabase(connectionString))
{
    //获取名为My_Entity集合没有就创建
    //将集合内的元素限定为MyEntity类型来反序列化
    var myCollection = db.GetCollection<MyEntity>("My_Entity");
    //增
    //插入成功会返回自动生成的_id
    var insertId = myCollection.Insert(new MyEntity() { Content = "Hello world" });
    //完成操作
    db.Commit();
    //查
    var findResult = myCollection.FindById(insertId);
    //改
    findResult.Content += "!";
    //实体类型没有声明`_id`字段,反序列化后的对象也会舍弃`_id`,在这里会报错找不到对应的记录来更新,因为`_id`字段为null
    //myCollection.Update(findResult);
    //实体类型没有声明`_id`字段但是已知`_id`的值还是可以操作
    //myCollection.Update(insertId,findResult);
    //根据条件更新
    myCollection.UpdateMany($"{{Content:'{findResult.Content}'}}", LiteDB.Query.Contains("Content", "Hello"));
    //完成操作
    db.Commit();
    //删
    //根据`_id`来删除
    myCollection.Delete(insertId);
    //根据条件来删除
    //删除内容包含Hello的所有记录
    //myCollection.DeleteMany(LiteDB.Query.Contains("Content", "Hello"));
    //完成操作
    db.Commit();
}
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
1
分享
返回顶部
顶部