FreeSql.Provider.SqliteCore

FreeSql基于微软提供的最新的Microsoft.Data.Sqlite.Core驱动的实现。

支持的版本

  • .NETStandard2.0+
  • net6.0

由于目前处于测试阶段,可使用myget源安装FreeSql.Provider.SqliteCore包。

dotnet add package FreeSql.Provider.SqliteCore --source https://www.myget.org/F/ncc/api/v3/index.json  --prerelease

不支持加密

0.安装包。

dotnet add package SQLitePCLRaw.bundle_e_sqlite3
dotnet add package FreeSql.Provider.SqliteCore

直接正常使用其他包一样使用FreeSql即可。SQLitePCLRaw.bundle_e_sqlite3 包不支持加密,但此种方式是官方实现的SQlite版本

捆绑 描述
SQLitePCLRaw.bundle_e_sqlite3 在所有平台上提供一致版本的 SQLite。 包括 FTS4、FTS5、JSON1 和 R* 树扩展。 建议使用
SQLitePCLRaw.bundle_e_sqlcipher 提供 SQLCipher 的非官方开放源代码内部版本。

FreeSql.Provider.SqliteCore如何加密

那我们不安装 SQLitePCLRaw.bundle_e_sqlite3包,换SQLitePCLRaw.bundle_e_sqlcipher

只有sqlcipher才支持加密。

0.选择一个目录,创建一个控制台项目OvOv.FreeSqlMicrosoftSqliteCore

dotnet new console -n OvOv.FreeSqlMicrosoftSqliteCore
cd OvOv.FreeSqlMicrosoftSqliteCore

1.安装包

dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
dotnet add package FreeSql.Provider.SqliteCore --source https://www.myget.org/F/ncc/api/v3/index.json --prerelease
  1. 连接串直接指定Password=xxx即可

创建一个类g.cs,可直接通过g.sqlite访问到IFreeSql对象

public class g
{
static Lazy<IFreeSql> sqliteLazy = new Lazy<IFreeSql>(() =>
{
var fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=local.db;Password=123qwe")
.UseAutoSyncStructure(true)
.UseLazyLoading(true)
.UseMonitorCommand(
cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)
)
.Build();
return fsql;
}
);
public static IFreeSql sqlite => sqliteLazy.Value;
}

测试加密,增加一些数据。Program.cs中测试

Test();

static void Test()
{
IInsert<Topic> insert = g.sqlite.Insert<Topic>();
var items = new List<Topic>();
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newTitle{a}", Clicks = a * 100 }); var affrows = insert.AppendData(items).ExecuteAffrows();
Console.WriteLine("affrows:" + affrows);
var list = g.sqlite.Select<Topic>().ToList();
Console.WriteLine("count:" + list.Count);
} [Table(Name = "tb_topic_insert")]
class Topic
{
[Column(IsIdentity = true, IsPrimary = true)]
public int Id { get; set; }
public int Clicks { get; set; }
public string Title { get; set; }
public DateTime CreateTime { get; set; }
}

运行项目

dotnet run

验证是否登录是否加密?

重新运行时,删除 连接串中的Password,发现无法获取数据。或使用Navicat Premium 工具发现无法连接。

+ .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=local.db;")
- .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|local.db;Password=123qwe")

提示如下内容,但使用密码时又能正常访问数据。

SqliteException: SQLite Error 26: 'file is not a database'.

相比包 FreeSql.Provider.Sqlite来说,目前存在一些限制,

|DataDirectory| 默认不支持

需要使用前,指定具体的文件夹,此处相当于指定了当前dll所在目录,即bin/Debug/net6.0。参考

string dataSubDirectory = Path.Combine(AppContext.BaseDirectory);

if (!Directory.Exists(dataSubDirectory))
Directory.CreateDirectory(dataSubDirectory); AppDomain.CurrentDomain.SetData("DataDirectory", dataSubDirectory);

public class g
{
static Lazy<IFreeSql> sqliteLazy = new Lazy<IFreeSql>(() =>
{
string dataSubDirectory = Path.Combine(AppContext.BaseDirectory); if (!Directory.Exists(dataSubDirectory))
Directory.CreateDirectory(dataSubDirectory); AppDomain.CurrentDomain.SetData("DataDirectory", dataSubDirectory); var fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|local.db;Password=123qwe")
.UseAutoSyncStructure(true)
.UseLazyLoading(true)
.UseMonitorCommand(
cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)
)
.Build(); return fsql;
}
);
public static IFreeSql sqlite => sqliteLazy.Value;
}

具体的链接串,请参考 https://docs.microsoft.com/zh-cn/dotnet/standard/data/sqlite/connection-strings

如下数学函数不支持

  • Floor
  • Ceiling
  • Log10
  • Pow
  • Sqrt
  • Cos

TimeSpanTest 测试 类中 不通过、ulong最大值,最小值,超出范围。

  • 不支持
  public void Days()
{
var data = new List<object>();
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Days == 0).ToList());
}
  • 不支持
 public void Minutes()
{
var data = new List<object>();
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Minutes > 0).ToList());
}

完整代码

FreeSql.Provider.SqliteCore如何加密的更多相关文章

  1. com.sun.crypto.provider.SunJCE

    Could not instantiate bean class [com.lz.monitor.alert.service.ServiceImp]: Constructor threw except ...

  2. JAVA 非对称加密工具

    import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.securi ...

  3. [开源] FreeSql.Tools Razor 生成器

    FreeSql 经过半年的开发和坚持维护,在 0.6.x 版本中完成了几大重要事件: 1.按小包拆分,每个数据库实现为单独 dll: 2.实现 .net framework 4.5 支持: 3.同时支 ...

  4. [开源] FreeSql.AdminLTE 功能升级

    前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...

  5. FreeSql (一)入门

    FreeSql 是一个功能强大的对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.5+(QQ群:4336577) FreeSql采用MIT开源协议托管 ...

  6. FreeSql v0.11 几个实用功能说明

    FreeSql 开源发布快一年了,立志成为 .Net 平台方便好用的 ORM,仓库地址:https://github.com/2881099/FreeSql 随着不断的迭代更新,越来越稳定,也越来越强 ...

  7. [开源] FreeSql 配套工具,基于 Razor 模板实现最高兼容的生成器

    FreeSql 经过半年的开发和坚持维护,在 0.6.x 版本中完成了几大重要事件: 1.按小包拆分,每个数据库实现为单独 dll: 2.实现 .net framework 4.5 支持: 3.同时支 ...

  8. [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码

    前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...

  9. 加密与解密 Sytem.Security.CryptoGraphy

    一.Hash加密,使用HashAlgorithm哈希算法类的派生类 HashAlgorithm派生类包括: KeyedHashAlgorithm: 显示所有加密哈希算法实现均必须从中派生的抽象类. M ...

随机推荐

  1. CAD简介

    Computer-aided design (CAD) is the use of computers (or workstations) to aid in the creation, modifi ...

  2. SparkStreaming消费Kafka,手动维护Offset到Mysql

    目录 说明 整体逻辑 offset建表语句 代码实现 说明 当前处理只实现手动维护offset到mysql,只能保证数据不丢失,可能会重复 要想实现精准一次性,还需要将数据提交和offset提交维护在 ...

  3. 零基础学习java------38---------spring中关于通知类型的补充,springmvc,springmvc入门程序,访问保护资源,参数的绑定(简单数据类型,POJO,包装类),返回数据类型,三大组件,注解

    一. 通知类型 spring aop通知(advice)分成五类: (1)前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常. (2)正常返回通知 ...

  4. spring注解事务管理

    使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间<beans xmlns="http://www.springframework.org/schema/b ...

  5. 【Spring Framework】12种spring中定义bean的方法

    前言 在庞大的java体系中,spring有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜.我们都知道spring是创建和管理bean的工厂,它提供了多种定义bean的方式,能够满足我们日常工 ...

  6. vue 中使用import导入 script 在线链接

    一般我们在vue中导入另外一个文件或者文件中的方法,我们都是使用import来实现他的,那么问题来了,现在我们要导入的不是另外的一个文件,而是在线链接,这该怎么办?我们也使用了 import * as ...

  7. maven依赖对zookeeper的版本冲突问题

    我用的是springcloudAlibaba+zookeeper zookeeper下载后 1,修改配置文件,conf目录下的zoo_sample.cfg修改为zoo.cfg. 2,打开zoo.cfg ...

  8. Mysql资料 数据类型

    目录 一.类型 整型 浮点型 定点数 字符串 二进制数据 时间日期类型 二.长度和范围 三.使用建议 原则 存储引擎 text和blob 浮点数和定点数 四.属性 一.类型 整型 取值范围如果加了un ...

  9. [BUUCTF]PWN3——warmup_csaw_2016

    [BUUCTF]PWN3--warmup_csaw_2016 题目网址:https://buuoj.cn/challenges#warmup_csaw_2016 步骤: 例行检查,64位,没有开启任何 ...

  10. Kafka从入门到放弃(三) —— 详说生产者

    上一篇对Kafka做了简单介绍,还没看的朋友可以点击下方链接. Kafka从入门到放弃(一) -- 初识别Kafka 消息中间件必须与生产者和消费者一起存在才有意义,这次先来聊聊Kafka的生产者. ...