//相对路径 //ORM建库功能说明:建议不要加目录ORM没办法创建文件夹,如果加目录需要手动建文件夹 public static string ConnectionString= @"DataSource=SqlSugar4xTest.sqlite"; //完整路径 //ORM建库功能说明:这种方式ORM可以创建文件夹 public static string ConnectionString= @"DataSource=c:\database\SqlSugar4xTest.sqlite"; //动态获取完整路径 Path.Combine(Environment.CurrentDirectory, "SampleDB.db") var db= new SqlSugarClient(new ConnectionConfig() { DbType = SqlSugar.DbType.Sqlite, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true });
NUGET安装
1. SQLitePCLRaw.bundle_e_sqlcipher2.0.4
2. 下面只装一个根据不同版本
SqlSugarCore (.net Core)
SqlSugarCore_NetCore2 (支持.Framework 4.7.2+)
string dbName = Path.Combine(Environment.CurrentDirectory, "SampleDB.db"); string connStr=new SqliteConnectionStringBuilder(){ DataSource= dbName, Mode=SqliteOpenMode.ReadWriteCreate ,Password ="admin" }.ToString();
性能优化:因为加密Open会很慢所以建议
使用:SqlsugarClient的单例+关闭自动释放 , 如果业务所有用到db全部用 Lock(db){ db.xxx;db.xxx; } 防止并发问题
因为SqlsugarClient不是线程安全对象所以加Lock防止并发(免费加密目前不适合高并发项目,只适单用户项目)
注意:不是加密不要这么用 ,这么用主要是解决免费加密Open慢的问题
当遇到Nuget安装System.Data.SQLite失败或者无法安装,或者一直报引用兼容错误不知道如何解决请使用 新人包
1、Nuget安装SqlSugar或者引用最新的SqlSugar.dll
2、解压下载文件包
3、System.Data.SQLite.dll 引用到项目
4、x86 x64 2个文件夹扔到bin下面的dll 同一目录
如果还不会安装的话可以拿这个DEMO跑了试试
1万并发在10秒的内的 随机时间内请求,也就是正常并发短时间每秒1000吞吐是可以的
var rand = new Random(); for (int i = 0; i < 10000; i++) { Task.Run(async () => { try { await Task.Delay(rand.Next(1, 10000));//模拟真实请求每秒均匀并发1000 await dbAuth.CopyNew()//Copynew保证线程安全 .Updateable<Order>() .SetColumns(o => o.Name == "2").Where(o => o.Id == 1).ExecuteCommandAsync(); } catch (Exception ex) { Console.WriteLine(ex.Message);//这儿打断点不出错就是OK的 } }); }
一般情况下不要使用,一般用于备份库或者移动库等
SQLiteConnection.ClearAllPools()//大小写可能不对
请升级:SqlSugarCore 5.1.4.108-preview23+
Sqlite因为是虚拟类型,使用默认值如果不当可能会有未知风险,比如时间格式错误就会引起查询不到时间等。
所以需要手动开启
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.Sqlite, ConnectionString = Config.ConnectionString3, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true, MoreSettings=new ConnMoreSettings() { SqliteCodeFirstEnableDefaultValue = true //启用默认值 } }); public class CodeFirstUnitafa { [SugarColumn(DefaultValue = "(strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))")] public DateTime Name { get; set; } [SugarColumn(DefaultValue = "1")] public string Name2 { get; set; } }
请升级:SqlSugarCore 5.1.4.108-preview25+
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.Sqlite, ConnectionString = Config.ConnectionString3, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true, MoreSettings=new ConnMoreSettings() { SqliteCodeFirstEnableDescription= true //启用备注 } });
下面建表就有备注了
CREATE TABLE "CodeFirstUnitafa121"( "Id" integer NOT NULL PRIMARY KEY AUTOINCREMENT /*编号*/ , "Name" datetime NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')) /*时间*/, "Name2" varchar(255) NOT NULL DEFAULT '1' ) /*姓名*/
请升级:SqlSugarCore 5.1.4.118-preview04+
var db = new SqlSugarClient(new ConnectionConfig() { IsAutoCloseConnection = true, DbType = DbType.Sqlite, ConnectionString = Connection, MoreSettings = new ConnMoreSettings() { SqliteCodeFirstEnableDropColumn = true //只支持.net core } }
当我们不想要文件,想用Sqlite作为缓存使用 ,用法如下:
using (var db = new SqlSugarClient(new ConnectionConfig() { IsAutoCloseConnection = false,//内存方式需要手动释放 DbType = DbType.Sqlite,//使用内存memory 要手动释放 ConnectionString = "Data Source=:memory:", })) { //通过using 或者 db.Close手动释放 db.CodeFirst.InitTables<UserInfo002>();//建表 db.Insertable(userInfo).ExecuteCommand(); }
注意:正常情况都是使用的文件,不要用内存
这个输出是正常现象用 db.colse会有 用db.dispose就不会有 如果你真想没有,那么你就用using(var db=new sqlsugarclient)
The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception
出现这个错一般是安装问题
(1) 独立安装 Microsoft.Data.Sqlite.Core 每个类都统一最新版本
(2) 如是发布Linux找不到文件报这个错
https://www.donet5.com/Ask/9/23442
存在错误格式的时间数据库,可以清空表用ORM重新插入