• 一个.Net开发的轻量级SQLite数据库ORM


    SQLite是一种流行的开源关系型数据库,它的设计目标是提供轻量级、高效、可靠和易用的数据存储服务。由于SQLite无需单独的服务器进程,它通常被用于嵌入式系统和单机应用程序中,也可以用于网络应用程序的辅助数据库。
    今天给大家推荐一个.NET开发的 SQLite ORMSQLite-net,非常好用,性能也很棒!

    关于 SQLite-net
    SQLite-net 是一个快速、便捷的数据库层。它的设计遵循以下目标:

    • 非常易于与现有项目集成,并且可以在所有 .NET 平台上运行。
    • 快速高效,对SQLite没有任何性能上的影响
    • 参数化执行CRUD 操作和查询,从而无需担心 SQL 注入等安全问题。
    • SQLite-net 使用一个小型反射驱动的 ORM 层,所以无需对当前使用的实体类进行任何重大更改。

    安装SQLite-net

    .NET CLI方式:

    dotnet add package sqlite-net-pcl
    
    • 1

    Package Manager方式:

    Install-Package sqlite-net-pcl
    
    • 1

    定义实体类:

    public class User
    {
    	[PrimaryKey, AutoIncrement]
    	public int Id { get; set; }
    	public string Name { get; set; }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    SQLite-net 提供两种 API 来执行数据库操作:同步 API 和异步 API。同步 API 会阻塞当前线程,直到数据库操作完成。异步 API 不会阻塞当前线程,而是允许线程继续执行其他任务,直到数据库操作完成。

    同步API使用:

    // Get an absolute path to the database file
    var databasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "MyData.db");
    
    var db = new SQLiteConnection(databasePath);
    db.CreateTable<User>();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面代码可以创建在数据库中,自动创建表User

    添加、更新和删除

    using (var db = new SQLiteConnection("MyData.db")) {
        // 添加
        var user = new User { Name = "张三" };
        db.Insert(user);
    
        // 读取
        var users = db.Table<User>().ToList();
    
        // 更新
        var userToUpdate = db.Get<User>(1); 
        userToUpdate.Name = "张三222";
        db.Update(userToUpdate);
    
        // 删除
        var userToDelete = db.Get<User>(2); 
        db.Delete(userToDelete);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    使用SQL 执行命令和查询

    db.Execute ("insert into User(Name) values (?)", "李四");
    var user_model = db.Query<User> ("select * from User where Id=?",3);
    
    • 1
    • 2

    异步API使用
    与同步API使用类似

    using (var db = new SQLiteConnection("MyData.db")) {
    	//创建表
    	await db.CreateTableAsync<User>();
        // 添加
        await db.InsertAsync(new User { Name = "张三" });
    
        // 查询
        var users = await db.Table<User>().ToListAsync();
    
        // 更新
        var userToUpdate = await db.GetAsync<User>(1); 
        userToUpdate.Name = "张三222";
        await db.UpdateAsync(userToUpdate);
    
        // 删除
        var userToDelete = await db.GetAsync<User>(2); 
        await db.DeleteAsync(userToDelete);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    加密支持

    加密一直是 SQLite 的一个重要问题,数据库加密在一定程度上可以保护数据,防止其他人直接访问数据库。SQLite-net 可以通过 sqlite-net-sqlcipher加密数据库

    sqlite-net-sqlcipher包安装:

    .NET CLI方式

    dotnet add package sqlite-net-sqlcipher
    
    • 1

    Package Manager方式

    Install-Package sqlite-net-sqlcipher
    
    • 1

    安装完成后,在连接数据库的时候, 密码需要在传递给连接构造函数时设置。

    var options = new SQLiteConnectionString(databasePath, true,
    	key: "password");
    var encryptedDb = new SQLiteAsyncConnection(options);
    
    • 1
    • 2
    • 3

    如果需要设置加密 pragma,可以将操作传递给连接字符串。

    var options2 = new SQLiteConnectionString (databasePath, true,
    	key: "password",
    	preKeyAction: db => db.Execute("PRAGMA cipher_default_use_hmac = OFF;"),
    	postKeyAction: db => db.Execute ("PRAGMA kdf_iter = 128000;"));
    var encryptedDb2 = new SQLiteAsyncConnection (options2);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    sqlite-net代码地址:https://github.com/praeclarum/sqlite-net

  • 相关阅读:
    计算机组成原理--存储系统
    行为型设计模式之观察者模式
    linux常见命令-文件目录类
    【无标题】
    8.for循环
    【Web安全靶场】sqli-labs-master 38-53 Stacked-Injections
    SpringBoot整合XXL-JOB详解
    基于改进麻雀算法优化变分模态分解(IAMSSA—VMD)的信号分解方法
    进程间通信:无名管道+有名管道
    Hystrix Dashboard断路监控仪表盘
  • 原文地址:https://blog.csdn.net/sd2208464/article/details/133828545