Releases: dotnetcore/FreeSql
v1.1.0
- 增加 FreeSql.Provider.MySqlConnector 扩展方法 ExecuteMySqlBulkCopy;
- 增加 FreeSql.All 全家桶包,懒人专用;
- 支持 Sqlite :memory: 模式; #191
- 完善 [Column(ServerTime = Utc)] 特性,对 Update 时也能生效;
- 完善 [Column(MapType = typeof(byte[]))] 对 Guid/string 的映射支持;#178
- 完善 MapType byte[] 对 Contains/Parse 表达式解析的处理;
- 优化 参考 Chloe 表达式针对变量的解析,提升了一倍性能;
- 优化 IsVersion 字段更新 version=ifnull(version,0)+1,防止字段为 null 一直报错;
- 优化 IdleTimeout 默认值为 20 秒; #194
- 修复 BaseRepository.UnitOfWork 延迟设置(即事务开启之后再设置)无效的 bug;
- 修复 FreeSql.Generator 外键导航属性大写小 bug;#177
- 修复 DbConnectionPool.Return 在 Sqlite 下的 bug;#179
- 修复 DbFirst mysql/pgsql/sqlserver 获取主键失败的 bug; 0.10.7 发布后的 bug #182
- 修复 GroupBy 类型转换错误;#186
- 修复 .ToList(a => new DTO(a.id)) 报 未将对象引用设置到对象的实例 问题; #187
- 修复 update语句,二元运算解析出错; #184
- 修复 xamarin ios 真机无法使用 Sqlite 的问题; #183
- 修复 父子关系导航属性 Dto 中直接使用 a.Parent 映射错误的 bug;
- 解决 表名名称包含点,无法进行 CRUD 的问题,由于测试的复杂性,此类情况仅支持 MySql/Sqlite CodeFirst 自动迁移;
注意:尽量不要使用带点的表名,只有 MySql/Sqlite 对此类表名支持 CodeFirst。但是它不影响 CRUD 功能,使用 [Table(Name = "`sys.config`")] 解决
v1.0.1
-
增加 EfCoreFluentApi 扩展包,接近 efcore fluentApi 的使用习惯;
-
增加 ColumnAttribute 属性 InsertValueSql,插入数据的时候指定用 sql 值;
-
增加 ISelect`1.WithSql("select * from user ...") 功能;
-
完善 PgSql OnConflictDoUpdate 功能增加 DO NOTHING 操作;#174
-
调整 最大连接池为 +5(属于内部设置);
-
修复 NoneParameter 无参对 byte[] 二进制拼接的 bug;#170
-
修复 IAdo.Query<object> 字段名重复的 bug;#162
v1.0.0
- 增加 FreeSql.Provider.MsAccess 支持 Access 数据库操作,已通过 2003/2007 版本测试;
- 增加 IInsert.ExecuteSqlBulkCopy 扩展方法执行 SqlBulkCopy 批量插入,在 FreeSql.Provider.SqlServer 可用;
- 增加 IInsert.ExecutePgCopy 扩展方法执行 PostgreSQL Copy 批量导入,在 FreeSql.Provider.PostgreSQL 可用;
- 增加 IInsert.ToDataTable 方法,为 BulkCopy 操作提供数据,该方法处理了(表名、字段名、类型)映射和忽略列;
- 增加 ISelect.ToSql 字段别名设置,默认为 AsIndex,可改为 AsProperty;#158
- 增加 ISelectGrouping 分组查询总量的方法 .Count();
- 增加 IInsert/IUpdate BatchOptions 方法指定批量插入的设置;
- 增加 FreeSql.Generator -Filter 设置选项,可阻止存储过程+视图的生成;
- 增加 FreeSql.Generator 在目标目录产生 __razor.cshtml.txt 文件,以便自定义修改模板生成;
- 完善 Select`2-10 多表查询对象,增加 First(select)/ToOne(select)/First<Dto> 方法;
- 优化 实体基类的属性位置,优先排在最前面;
- 优化 实体属性,支持 protected set 属性;
- 优化 ISelect.Count() 之前使用了 OrderBy 会产生的 SQL 语法问题;
- 优化 AsTable 分表查询 Any/Min/Max/Avg/Sum/Count 的处理;#158
- 优化 BaseEntity Select 查询数据时自动 Attach;
- 优化 没有主键的实体,约定 id 命名的属性上若设置了 IsPrimary = false,则其不属于约定主键;
- 兼容 Vb.Net 无法使用 IncludeMany 的问题;
- 兼容 Vb.Net 无法使用 int? 类型 = 等号表达式解析;
- 修复 Ado.Query 查询字段重复时报错;#162
- 修复 LazyLoading 在 Net4 环境下的问题;
- 调整 Avg 方法返回值为 double,Sum 方法返回值为 decimal;
- 整理 实体类 Ctor 有构造函数的映射处理;wiki
v0.12.21(达梦数据库)
- 增加 达梦数据库 ODBC 适配,和单元测试,支持 CodeFirst 模式开发;
- 增加 FreeSql.Generator dotnet-tool 命令行实体类生成工具;
- 增加 Repository/DbContext SaveMany 方法实现一对多,子数据的完整保存;
- 增加 IEnumerable<(T1, T2)>.Contains(col1, col2) 扩展方法,实现自定义表达式解析多列无法 IN 的问题;
- 增加 RawValueAttribute 实现自定义表达式时,使用原始值传入参数;
- 增加 DateTime 扩展方法 Between 和 BetweenEnd 自定义表达式;
- 增加 Where In 表达式解析;wiki
- 增加 ISelect.ForUpdate 排他更新锁(根据数据库类型的规则,见代码注释);
- 增加 实体特性 [Column(ServerTime = DateTimeKind.Utc)] 使用数据库时间执行插入数据;wiki
- 增加 ICodeFirst.IsGenerateCommandParameterWithLambda 选项,开启表达式解析的命令参数化;wiki
- 增加 FreeSqlBuilder.UseConnectionFactory 自定义数据库连接对象的创建方法;
- 增加 UnitOfWork 静态属性 DebugBeingUsed,用于生产环境监视正在使用中的事务;
- 增加 BaseEntity 物理删除方法 Delete(true);
- 完善 SqlServer WithLock 功能,组合多种使用 | 枚举相联;
- 补充 同线程时间 fsql.Transaction 事务等级参数的传入;
- 兼容 Vb.Net 表达式解析字符串 = 判断;
- 优化 IncludeMany 级联查询支持异步适配(之前是同步方式);
- 优化 MaxLength 功能,并且增加 [Column(StringLength = 100)] 同等的特性功能;
- 优化 GlobalFilter Apply 自动重命名表达式参数名,避免内容重复问题;
- 优化 ReadAnonymous 映射类型不一致的容错;
- 优化 GlobalFilter 过滤器表达式 bool 解析;
- 优化 ExpressionCallContext 可设置、附加参数化对象;
- 修复 ISelect.AsTable union all 查询对 count/max/min/avg/sum 的别名 bug;
- 修复 DbContext TrackList 对匿名对象处理的 bug;#150
- 修复 Oracle Dbfirst 字段可空、和主键判断的 bug;
- 修复 ToList((a,b) => new { a, b }) 当 b 为 null 的时候,应该整个 b 为 null;(导航属性没这个问题)
- 修复 Sqlite attachs 附加数据库别名 bug;
- 修复 Select<T1, T2> AsTable 析构函数处理可能产生 bug;
- 修复 多表查询 WhereCascade,如果 Join 没有 On 条件,可能导致生成的 SQL 多了一个 AND 出错;
- 修复 Dto 映射,在二级即 Dto 属性上又 new Dto 的时候,错误的又重复映射了全部字段;
- 修复 ToList(a => new Dto { .. }) 在使用 GroupBy 之后报错的 bug;
- 修复 表达式解析 Guid.NewGuid() 的错误;
- 修复 Oracle/Sqlite IInsert.ExecuteInserted 方法,返回了被 clear 过后的 _source,其实本来也没意义;
- 修复 注释迁移到数据库,在 asp.net 4.7 无效的问题;
- 修复 批量插入 Values 数量限制超出的判断;
- 修复 IncludeMany(a => a.x1.x2.Childs) 当 x1, x2 为 null 的报 null 错误;
- 调整 fsql.Transaction(Action, Timeout) 参数顺序;
- 调整 SaveManyToMany 方法名为 SaveMany;
- 移除 Lazy 延时加载动态代码中的 Newtonsoft.Json 依赖;
v0.11.23
- 增加 ExpressionCallAttribute 特性,实现表达式函数自定义解析;wiki
- 增加 IncludeMany 贪婪加载的时候可指定子表的字段,避免查询子表所有字段;
- 增加 DbContext、Repository SaveManyToMany 方法,实现手工保存 ManyToMany 关联数据;wiki
- 增加 IFreeSql.GlobalFilter 全局过滤器,wiki;
- 增加 AsTable 和 Repository 分表时的自动迁移分表功能;
- 增加 ICodeFirst.SyncStructure(Type entityType, string tableName) 指定表名来迁移实体;
fsql.CodeFirst.SyncStructure(typeof(Log), "Log_1"); //迁移到 Log_1 表
fsql.CodeFirst.SyncStructure(typeof(Log), "Log_2"); //迁移到 Log_2 表
- 增加 ISelect ToDelete/ToUpdate 方法,实现更复杂的删除/更新操作,wiki;
- 增加 SqlServer ISelect.WithLock 扩展方法,实现 with(nolock) 查询;
- 增加 SqlServer IFreeSql.SetGlobalSelectWithLock 扩展方法,实现全局设置 with(nolock) 查询;
- 增加 FreeSql.DbContext DbSet Remove 可根据 lambda 条件删除数据的方法;
- 增加 FreeSql.Provider.Sqlite 对 Xamarin 环境下的适配;
- 增加 MySql 特有功能 Insert Ignore Into;wiki
- 增加 MySql 特有功能 On Duplicate Key Update 功能,wiki;
- 增加 PostgreSQL 特有功能 On Conflict Do Update 功能,wiki;
- 兼容 SqlServer nvarchar/varchar 表达式解析,分别解析为:N'' 和 '',优化索引执行计划;
- 优化 Contains 表达式解析为 where in 自动拆分,防止大于 1000 的 SQL 错误,如下:
var arr = Enumerable.Range(1, 1333).ToArray();
var sql = fsql.Select<T>().Where(a => arr.Contains(a.Int)).ToList();
//原来:where id in (1..1333)
//现在:where id in (1..500) or id in (501..1000) or id in (1001..1333)
-
优化 FreeSql.DbContext 构造方法,方便注入使用;
-
优化 Aop.AuditValue 审计过的值,IUpdate.UpdateColumns 即使不指定该列也会更新;
-
优化 ManyToMany 中间表不需要指明 [Column(IsPrimary = true)] 特性;
-
优化 实体类重写属性 new 如果类型与基类不一致,无法使用的问题;
-
完善 SqlServer2005 环境跑通了所有单元测试;
-
完善 所有参数化 object parms 可使用 IDictionary 类型传入;
-
完善 ToList Dto 映射查询的规则;wiki
- 修复 Where(a => bool && id > 0) bool 未解析正确的 bug;
(之前大多数类似的表达都能解析,这次是一个特殊情况)
- 修复 BaseRepository 析构时与工作单元的回滚逻辑 bug;#131
- 修复 FreeSql.DbContext 析构方法的 bug,错误的回滚了外部 UnitOfWork;
- 修复 MapType 属性的表达式解析 数组.Contains 得到是映射之前的值 bug;
- 修复 MapType 属性 与 IncludeMany 变异功能未映射处理的 bug;
- 修复 IsNulable 特性不生效的 bug;
- 修复 SqlServer DbFirst、CodeFirst 查询实体表的列信息错误,当设置了表/列多个扩展属性时发生;
- 修复 SqlServer2005 CodeFirst 迁移时,不支持 SET (LOCK_ESCALATION TABLE) 的错误(已做适配);
- 修复 SqlServer2005 批量插入SQL语法错误,不支持 Values(),()(已做适配);
- 修复 ReadAnonymous 读取数据设置只读属性的错误;#132
- 修复 ISelect .From 方法之前使用 .Include 方法,导致生成的多表 JOIN 位置错误的 bug;
- 移除 IUpdate/IDelete WhereExists 方法;
- 移除 TableAttribute.SelectFilter 功能;
v0.10.15 (.Net Framework 4.0)
- 增加 .Net Framework 4.0 的支持,出于环境考虑 .Net Framework 4.0 不支持异步方法;
- 增加 IndexAttribute 特性,自动迁移索引,以及对应的 FluentApi 方法;
- 增加 NavigateAttribute 特性对应的 Fluent 功能;#96
- 增加 ColumnAttribute 可插入(CanInsert)、可更新(CanUpdate);#99
- 增加 IFreeSql.Insert<T>(List source) 方法;
- 增加 Aop.ConfigEntity 属性 ModifyIndexResult 现实 IndexAttribute 的设置;
- 增加 PostgreSQL 的 Odbc 访问提供,相比 FreeSql.Provider.PostgreSQL 支持的类型更少;
- 增加 通用的 Odbc 访问提供,不能迁移实体到数据库,不能 Skip 这样来分页,理论上能 crud 所有 odbc 数据库;
- 增加 DbContext/Repository ManyToMany联级保存功能(之前已支持OneToMany);
文档: https://github.com/2881099/FreeSql/wiki/%e8%81%94%e7%ba%a7%e4%bf%9d%e5%ad%98
- 增加 FreeSql.DbContext 实体对象的变化事件;
- 增加 List<T1> 扩展方法 IncludeMany,实现从已知的内存 List 数据,进行和 ISelect.IncludeMany 相同功能的贪婪加载;
示例:new List<Song>(new[] { song1, song2, song3 }).IncludeMany(g.sqlite, a => a.Tags);
文档:https://github.com/2881099/FreeSql/wiki/%e8%b4%aa%e5%a9%aa%e5%8a%a0%e8%bd%bd#%E5%AF%BC%E8%88%AA%E5%B1%9E%E6%80%A7-onetomanymanytomany
- 优化 FreeSqlBuilder 处理 MaxLength 特性的容器处理;
- 优化 枚举属性的默认值容错,枚举下标不存在 0 的时候,mysql 迁移结构默认值报错;
- 优化 ORACLE Command 绑定变量 BindByName = true;#107
- 优化 IUpdate.IgnoreColumns/UpdateColumns 可对属性名,或字段名做设置;#95
- 优化 忽略 List<T> 作为 Curd 类型操作;
- 补充 Aop.CurdBefore 事件参数 Table 实体类型的元数据;
- 修复 Pgsql string[] 属性表达式 Contains 缺少类型转换的 SQL 语法错误;
- 修复 postgresql 12 移除 pg_attrdef.adsrc 列,导致 CodeFirst 方法失败的 bug;
- 修复 PostgreSQL DbFirst 获取字段类型的时候,没有拼得字符串的长度(如 varchar(255));
- 修复 DbFirst 当表数量过大时(如 oracle 表数量大于 1000),可能报错的 bug;
- 修复 FreeSql.DbContext/FreeSql.Repository 当主键为 Guid? 可空类型时,发生参数错误;
System.ArgumentException:“Expression of type 'System.Guid' cannot be used for assignment to type 'System.Nullable`1[System.Guid]'”
- 移除 ColumnAttribute.Unique 属性设置,改为 IndexAttribute 特性设置唯一键;
v0.9.18(ODBC)
- 增加 FreeSql.Provider.Odbc,实现 Oracle/SqlServer/MySql/PostgreSQL 的 Odbc 专用访问提供;
- 增加 通用的 Odbc 访问提供,理论上能 crud 所有 odbc 数据库;
- 增加 FreeSql.Extensions.JsonMap 扩展包,实现快速将对象映射为json字符串的方法;
fsql.UseJsonMap(); //开启功能
class TestConfig
{
public int clicks { get; set; }
public string title { get; set; }
}
[Table(Name = "sysconfig")]
public class S_SysConfig<T>
{
[Column(IsPrimary = true)]
public string Name { get; set; }
[JsonMap]
public T Config { get; set; }
}
- 增加 MaxLength 特性的解析,实体字符串长度设置;
class Topic {
[MaxLength(128)]
public string Title { get; set; }
}
- 增加 BaseRepository.AttachOnlyPrimary 方法,只附加实体的主键值;
在更新前使用可实现不查询数据库再更新、也可以实现更新时不更新值为 null 的字段
class T {
public int id { get; set; }
public string name { get; set; }
public string other { get; set; }
}
var item = new T { id = 1, name = "xx" };
fsql.GetRepository<T>().AttachOnlyPrimary(item).Update(item); //只更新 name
-
增加 FreeSqlBuilder.UseConnectionString 参数 providerType,可解决因包版本冲突时,可能无法反射获得 FreeSql.Provider 对应的类型,通常这个参数不需要设置;
-
增加 创建表时指定字段位置,如:[Column(Position = 1],可为负数即反方向位置;
-
增加 ISelect.ToChunk 实现分块查询数据,减少数据过大时内存占用;
-
增加 AsTable 多次,可查询分表后的多个子表记录,以 UNION ALL 形式执行;
-
增加 ISelect.First() 方法;
-
优化 MaxLength 特性,当指定为 -1 时 DbType 会分别映射类型 text/nvarchar(max)/nvarchar2(4000);
-
优化 表达式解析未实现的错误提醒,如 $"";
-
优化 AsTable UseSyncStructureToLower/ToUpper 设置,兼容 AsTable((t,o) => "(select * from tb)");
-
优化 ISelect`1.Include之后ToList参数includeNestedMembers默认为true;
-
优化 MapType DateTime/DateTimeOffset 类型转换互通;
- 移除 FreeSql.Repository 扩展方法 FromRepository;
- 修复 批量更新 bug,当某行某字段值为null,其他行的该字段也更新成了null;【重大 bug】
- 修复 Lambda 表达式中 DateTime.Now.ToString("yyyyMMdd") 不能直接执行的 bug;
- 修复 属性无set自动忽略的bug;
- 修复 导航属性配置,循环关系的情况下可能导致的 bug;
- 修复 导航属性配置和Aop冲突的 bug;
- 修复 Aop.AuditValue 与 FreeSql.Repository 主键状态管理的冲突;
- 修复 MapType 表达式解析时的层级 bug,可能出现 ExpressionTree 类型错误;
v0.8.11
- 增加 Aop.AuditValue 事件,在插入/更新数据时审计属性值,wiki;
- 优化 导航属性的关系,友好支持 int/int? 映射;
- 优化 DbContext/Repository 局部调整;
- 优化 DbContext/Repository 局部调整;
- 补充 使用 IsIgnore 忽略后,表达式再使用时的友好错误提示;
- 修复 Pgsql 批量更新使用 NoneParameter 后日期类型的语法 bug;
- 修复 Oracle DbFirst 大小写问题没正确获取列对应 CsType 值的 bug;
- 修复 IncludeMany 变异 Where 指定的属性类型不一致的 bug;(如 int 和 int?)
- 修复 导航关系多属性时的错序 bug;
- 修复 延时属性的类,没有设置Namespace时的 bug;
- 修复 DbContext.Save 只查询不更新的bug;
v0.8.5
-
增加 FreeSql.Provider.Oracle 下的 OraclePrimaryKeyName 特性,手工设置主键名防止默认名过长问题;
-
增加 IFreeSql.Select`T1...T10 的多表查询扩展方法;
-
增加 表达式函数 string.IsNullOrWhiteSpace 解析;
-
增加 UnitOfWork.Current 静态属性,AsyncLocal 实现 [NETStandard 2.0];
-
增加 ISelect.WhereCascade 实现多表查询时,向每个表中附加条件; wiki;
-
增加 表达式对基类转换的解析,如:Where(a => (a as BaseEntity).IsDeleted == true);
-
增加 Examples 项目 base_entity,利用 BaseEntity 实现简洁的数据库操作;
-
增加 子查询判断,如果使用了相同 ISelect 会死循环;
-
增加 连接字符串错误时的友好提示;
-
增加 子查询函数 First、Count、Min、Max、Sum、Avg 的支持 #wiki;
-
优化 内部实体管理的默认值,防止导航属性使用抽象类/接口时出现错误;
-
优化 表达式中不能使用 c# 函数的问题,
如:where(a => HttpContext.Session.GetString("UserID") == a.UserId)
- 优化 IUpdate.Set 表达式传入匿名类更新多个字段;
- 优化 IInsert.InsertIdentity 可插入自增属性;
- 优化 ExpressionTree 类型转换的友好错误提示;
- 补充 ISelect`T1...T10 LeftJoin/InnerJoin/RightJoin 多参数方法;
- 补充 Navigate(ManyToMany = typeof(中间表)) 多对多自定义配置;
- 补充 Oracle DbFirst raw 等类型映射处理,其他未处理的类型将映射为 string;
- 修复 ISelect.WhereCascade 当内部使用 (a as BaseEntity).TenantId 时报错的 bug;
- 修复 ISelect Sum/First 子查询时,若子查询实体类与主查询一样时,导致的 bug;
- 修复 IUpdate.Set 表达式传入匿名类更新多个字段,后表达式未加[]或""的 bug;
- 修复 Aop.ConfigEntityProperty 操作导航属性后,执行 insert 语句认为它也是字段的 bug;
- 修复 查询重复数据时使用 IncludeMany 出现字典重复添加的 bug;(如一对多使用LeftJoin查询,主实体查询出了重复的数据)
- 修复 Oracle 表达式 DateTime.Subtract(DateTime) 解析 bug;
- 修复 Oracle CodeFirst 使用 OldName 迁移自增字段时,未删除旧的触发器和序列的 bug;
- 修复 CodeFirst 迁移代码注释到数据库,继承的基类未生效的 bug;
- 修复 SqlServer IUpdate.ExecuteUpdated 拼接SQL bug;
- 修复 .From 多表查询别名的匹配 bug;
- 修复 SqlServer 未处理字符串前面加N 的 bug;
- 修复 LambadaExpressionExtensions 扩展方法 And/Or 当存在二级 lambada 时替换错误的 bug;
如:where.Add(a => a.Tags.Any(b => ...)),b 替换错误
v0.7.6
v0.7.6
- 增加 IGroupSelect ToSql(string) 重载方法;
- 优化 表达式 true && ... 解析的处理;
- 优化 Navigate 指定联合键关系时,对属性顺序的要求,当类型不一样、名称一样时无须指明属性的顺序,如:[Navigate("MemberId, ShopId")];
- 修复 Insert/Update 大批量操作分批执行时,如果外部使用了 Ado.Transaction,没有使用线程事务对象,而是创建了新事务的 bug;
- 修复 Insert ClearData 重复利用的 bug(使用 IgnoreColumns 进行大批量插入时会发生);
- 修复 ISelect.From<T2, T2> 当传入相同的两个实体类型,可能导致内部 Join 无法匹配的 bug;
- 修复 根据代码注释,迁移到数据库备注,当实体类属于 .exe 程序集时的 bug:System.Xml.XmlException:“根级别上的数据无效。 第 1 行,位置 1。”