Table of Contents
- 1、如何监视 SQL?
- 2、MySql Enum 映射
- 3、多个 IFreeSql 实例,如何注入使用?
- 4、怎么执行 SQL 返回实体列表?
- 5、错误:【主库】状态不可用,等待后台检查程序恢复方可使用。xxx
- 6、错误:【主库】对象池已释放,无法访问。
- 7、错误:ObjectPool.Get 获取超时(10秒)。
- 8、多平台代码参考,使用自定义 SqliteProvider,例如 Sqlite 用 Microsoft.Data.Sqlite 或者反射 Mono.Data.Sqlite.
- 9、2.6.100升级到3.0.100 后无法连接 sqlserver 提示证书无效, 提示证书链是由不受信任的颁发机构颁发的.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
1、如何监视 SQL?
方法一:UseMonitorCommand + UseNoneCommandParameter
static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.MySql, "...")
.UseMonitorCommand(cmd => Console.WriteLine($"线程:{cmd.CommandText}\r\n"))
.UseNoneCommandParameter(true)
.Build();
方法二:Aop.CurdBefore/CurdAfter
fsql.Aop.CurdAfter += (s, e) =>
{
if (e.ElapsedMilliseconds > 200)
Console.WriteLine($"线程:{e.Sql}\r\n");
};
2、MySql Enum 映射
默认情况 c# 枚举会映射为 MySql Enum 类型,如果想映射为 int 在 FreeSqlBuilder Build 之后执行以下 Aop 统一处理:
fsql.Aop.ConfigEntityProperty += (s, e) =>
{
if (e.Property.PropertyType.IsEnum)
e.ModifyResult.MapType = typeof(int);
};
3、多个 IFreeSql 实例,如何注入使用?
https://github.com/dotnetcore/FreeSql/issues/44
4、怎么执行 SQL 返回实体列表?
//直接查询
fsql.Ado.Query<T>(sql);
//嵌套一层做二次查询
fsql.Select<T>().WithSql(sql).Page(1, 10).ToList();
//使用内存数据
fsql.Select<T>().WithMemory(list).ToList();
5、错误:【主库】状态不可用,等待后台检查程序恢复方可使用。xxx
https://github.com/dotnetcore/FreeSql/discussions/1080
6、错误:【主库】对象池已释放,无法访问。
https://github.com/dotnetcore/FreeSql/discussions/1079
7、错误:ObjectPool.Get 获取超时(10秒)。
https://github.com/dotnetcore/FreeSql/discussions/1081
8、多平台代码参考,使用自定义 SqliteProvider,例如 Sqlite 用 Microsoft.Data.Sqlite 或者反射 Mono.Data.Sqlite.
有条件的同学直接试试 FreeSql.Provider.SqliteCore 包,使用的就是 Microsoft.Data.Sqlite 驱动.
1.添加包
<PackageReference Include="FreeSql.Provider.Sqlite" Version="3.0.100" />
<PackageReference Include = "Microsoft.Data.Sqlite" Version="6.0.3" />
2.代码
var _database = new Microsoft.Data.Sqlite.SqliteConnection($"Data Source=document.db");
var fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionFactory(FreeSql.DataType.Sqlite, () => _database, typeof(FreeSql.Sqlite.SqliteProvider<>))
.UseAutoSyncStructure(true)
.UseNoneCommandParameter(true) //必须开启,因为Microsoft.Data.Sqlite内插处理有bug
.UseMonitorCommand(cmd => Console.Write(cmd.CommandText))
.Build();
using System.Data.SQLite;
var dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
var _database = new SQLiteConnection($"Data Source={dbpath}");
var fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionFactory(FreeSql.DataType.Sqlite, () => _database, typeof(FreeSql.Sqlite.SqliteProvider<>))
.Build();
Xamarin Forms,代码较多 主程序,接口获取rovider,各个平台自己实现.
if (Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Android)
{
fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionFactory(FreeSql.DataType.Sqlite, () => DependencyService.Get<ISQLite>().GetConnectionSqlite("document"), typeof(FreeSql.Sqlite.SqliteProvider<>))
.UseNoneCommandParameter(true)
.Build();
}
9、2.6.100升级到3.0.100 后无法连接 sqlserver 提示证书无效, 提示证书链是由不受信任的颁发机构颁发的.
请尝试:
1.连接字符串里加入 "Encrypt=True; TrustServerCertificate=True;"
2.使用FreeSql.Provider.SqlServerForSystem替换FreeSql.Provider.SqlServer
深入讨论请转到 https://github.com/dotnetcore/FreeSql/issues/992#issuecomment-1005305027
Basic
- 入门 Getting Started
- 安装 How to Install
- 添加 Insert Data
- 删除 Delete Data
- 修改 Update Data
- 添加或修改 Insert or Update ✨
- 查询 Query Data
- 仓储层 Repository Layer
- CodeFirst
- DbFirst
- 表达式函数
- 事务
- 过滤器
- ADO
- AOP✨
- 读写分离
- 分表分库
- 租户
- 性能
- 动态操作 Dynamic Operations
- 你不知道的功能✨
- API参考