Skip to content

更新日志

28810 edited this page Dec 6, 2019 · 284 revisions

完整版本:年数-月-日-当日版本号,FreeSql、FreeSql.Repository、FreeSql.DbContext 版本号相同。

v0.12.10(预告)

  • 修复 多表查询 WhereCascade,如果 Join 没有 On 条件,可能导致生成的 SQL 多了一个 AND 出错;

v0.12.9

  • 增加 DateTime 扩展方法 Between 和 BetweenEnd 自定义表达式;
  • 修复 Dto 映射,在二级即 Dto 属性上又 new Dto 的时候,错误的又重复映射了全部字段;

v0.12.8

  • 优化 IncludeMany 级联查询支持异步适配(之前是同步方式);
  • 优化 MaxLength 功能,并且增加 [Column(StringLength = 100)] 同等的特性功能;
  • 优化 GlobalFilter Apply 自动重命名表达式参数名,避免内容重复问题;
  • 修复 表达式解析 Guid.NewGuid() 的错误;
  • 补充 GetTableByEntity 当属性名或特性名重复时的友好错误提示;

v0.12.7

  • 移除 Lazy 延时加载动态代码中的 Newtonsoft.Json 依赖;

v0.12.6

  • 优化 ReadAnonymous 映射类型不一致的容错;
  • 修复 Oracle/Sqlite IInsert.ExecuteInserted 方法,返回了被 clear 过后的 _source,其实本来也没意义;
  • 修复 DbContext SaveMany 对比删除的 bug;

v0.12.5

  • 增加 实体特性 [Column(ServerTime = DateTimeKind.Utc)] 使用数据库时间执行插入数据;wiki
  • 修复 ToList(a => new Dto { .. }) 在使用 GroupBy 之后报错的 bug;
  • 修复 注释迁移到数据库,在 asp.net 4.7 无效的问题;
  • 修复 批量插入 Values 数量限制超出的判断;

v0.12.3

  • 增加 ICodeFirst.IsGenerateCommandParameterWithLambda 选项,开启表达式解析的命令参数化;wiki

FreeSqlBuilder 上使用 UseGenerateCommandParameterWithLambda(true) 开启

  • 优化 ExpressionCallContext 可设置、附加参数化对象;
  • 修复 IncludeMany(a => a.x1.x2.Childs) 当 x1, x2 为 null 的报 null 错误;

v0.11.24

  • 增加 Repository/DbContext SaveMany 方法实现一对多,子数据的完整保存;
  • 调整 SaveManyToMany 方法名为 SaveMany;
  • 增加 UnitOfWork 静态属性 DebugBeingUsed,用于生产环境监视正在使用中的事务;

v0.11.23

  • 增加 ExpressionCallAttribute 特性,实现表达式函数自定义解析;wiki
  • 优化 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)
  • 修复 IsNulable 特性不生效的 bug;

v0.11.22

  • 兼容 SqlServer nvarchar/varchar 表达式解析,分别解析为:N'' 和 '',优化索引执行计划;
  • 增加 MySql 特有功能 Insert Ignore Into;wiki

v0.11.21

  • 修复 SqlServer DbFirst、CodeFirst 查询实体表的列信息错误,当设置了表/列多个扩展属性时发生;
  • 修复 SqlServer2005 CodeFirst 迁移时,不支持 SET (LOCK_ESCALATION TABLE) 的错误(已做适配);
  • 修复 SqlServer2005 批量插入SQL语法错误,不支持 Values(),()(已做适配);
  • 完善 SqlServer2005 环境跑通了所有单元测试;
  • 修复 ReadAnonymous 读取数据设置只读属性的错误;#132

v0.11.20

  • 增加 IncludeMany 贪婪加载的时候可指定子表的字段,避免查询子表所有字段;
  • 调整 ToList(a => new 实体类 { id = 1, title = a.xx.Title}),如果 dto 类型为实体类,则规则为只查询 id, title 字段;

这个规则与 v0.11.6 有差异,它是先映射 Dto 所有属性,再映射 id、title,区别:一个是 dto 类型,一个是查询的实体类型

  • 修复 Where(a => bool && id > 0) bool 未解析正确的 bug;

(之前大多数类似的表达都能解析,这次是一个特殊情况)

v0.11.19

  • 修复 MapType 属性的表达式解析 数组.Contains 得到是映射之前的值 bug;
  • 修复 MapType 属性 与 IncludeMany 变异功能未映射处理的 bug;

v0.11.18

  • 增加 DbContext、Repository SaveManyToMany 方法,实现手工保存 ManyToMany 关联数据;wiki
  • 修复 BaseRepository 析构时与工作单元的回滚逻辑 bug;#131
  • 优化 ManyToMany 中间表不需要指明 [Column(IsPrimary = true)] 特性;

v0.11.12

  • 增加 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 表
  • 增加 PostgreSQL 特有功能 On Conflict Do Update 功能,wiki
  • 完善 所有参数化 object parms 可使用 IDictionary 类型传入;

v0.11.11

  • 增加 MySql 特有功能 On Duplicate Key Update 功能,wiki
  • 优化 实体类重写属性 new 如果类型与基类不一致,无法使用的问题;
  • 修复 ISelect .From 方法之前使用 .Include 方法,导致生成的多表 JOIN 位置错误的 bug;

v0.11.9

  • 增加 FreeSql.Provider.Sqlite 对 Xamarin 环境下的适配;
  • 增加 SqlServer ISelect.WithLock 扩展方法,实现 with(nolock) 查询;
  • 增加 SqlServer IFreeSql.SetGlobalSelectWithLock 扩展方法,实现全局设置 with(nolock) 查询;
  • 修复 MySql CodeFirst DateTime 同步结构条件判断的 bug,导致每次都执行 alter;

高版本支持 datetime(3) 精度的、或者不指定 DbType="datetime" 就没事

  • 移除 Aop.ToList;
  • 移除 Aop.Where;

v0.11.6

  • 调整 ToList(a => new Dto { id = 1, title = a.xx.Title}),之前只映射 id、title,现在是先映射 Dto 所有属性,再映射 id、title;

提醒:如果之前使用此方法映射 Dto 的指定属性,请改为匿名类映射,避免查询了不需要的字段影响性能。

v0.11.5

  • 修复 FreeSql.DbContext 析构方法的 bug,错误的回滚了外部 UnitOfWork;

v0.11.4

  • 增加 ISelect ToDelete/ToUpdate 方法,实现更复杂的删除/更新操作,wiki
  • 移除 IUpdate/IDelete WhereExists 方法;

v0.11.3

  • 增加 FreeSql.DbContext DbSet Remove 可根据 lambda 条件删除数据的方法;
  • 优化 Aop.AuditValue 审计过的值,IUpdate.UpdateColumns 即使不指定该列也会更新;

v0.11.2

  • 增加 IFreeSql.GlobalFilter 全局过滤器,wiki
  • 移除 TableAttribute.SelectFilter 功能;
  • 修复 MySql/SqlServer CodeFirst 同步结构 bug;

当表已存在后增加自增列时,产生的脚本不应该包含默认认设置

v0.11.1

  • 优化 FreeSql.DbContext 构造方法,方便注入使用;

v0.10.15 (.Net Framework 4.0)

  • 增加 .Net Framework 4.0 的支持,出于环境考虑 .Net Framework 4.0 不支持异步方法;
  • 增加 IFreeSql.Insert<T>(IEnumerable source) 方法;

v0.10.14

  • 调整 DbContext.EntityChangeInfo 类名为 DbContext.EntityChangeReport.ChangeInfo;
  • 调整 IUnitOfWork 接口,移除 OnEntityChange 属性,增加 EntityChangeReport 属性;
  • 优化 FreeSqlBuilder 处理 MaxLength 特性的容器处理;

v0.10.13

  • 修复 postgresql 12 移除 pg_attrdef.adsrc 列,导致 CodeFirst 方法失败的 bug;
  • 增加 Aop.ConfigEntity 属性 ModifyIndexResult 现实 IndexAttribute 的设置;

v0.10.12

  • 增加 FreeSql.DbContext 实体对象的变化事件;

文档:https://github.com/2881099/FreeSql/wiki/DbContext#%E5%AE%9E%E4%BD%93%E5%8F%98%E5%8C%96%E4%BA%8B%E4%BB%B6

  • 补充 Aop.CurdBefore 事件参数 Table 实体类型的元数据;

v0.10.11

  • 优化 枚举属性的默认值容错,枚举下标不存在 0 的时候,mysql 迁移结构默认值报错;
  • 优化 ORACLE Command 绑定变量 BindByName = true;#107

v0.10.10

  • 修复 PostgreSQL DbFirst 获取字段类型的时候,没有拼得字符串的长度(如 varchar(255));

v0.10.9

  • 修复 DbFirst 当表数量过大时(如 oracle 表数量大于 1000),可能报错的 bug;

v0.10.8

  • 增加 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

  • 修复 FreeSql.DbContext/FreeSql.Repository 当主键为 Guid? 可空类型时,发生参数错误;

System.ArgumentException:“Expression of type 'System.Guid' cannot be used for assignment to type 'System.Nullable`1[System.Guid]'”

v0.10.7

  • 增加 IndexAttribute 特性,自动迁移索引,以及对应的 FluentApi 方法;
  • 移除 ColumnAttribute.Unique 属性设置,改为 IndexAttribute 特性设置唯一键;
  • 调整 IInsert<T1> Insert<T1>(IEnumerable<T1> source) 参数类型改成了 List;

v0.10.6

  • 优化 DbContext/Repository ManyToMany联级保存功能,当是新增数据时不查询中间表记录对比差异(直接插入);

v0.10.5

  • 增加 DbContext/Repository ManyToMany联级保存功能(之前已支持OneToMany);

wiki: https://github.com/2881099/FreeSql/wiki/%e8%81%94%e7%ba%a7%e4%bf%9d%e5%ad%98

v0.10.4

  • 增加 ColumnAttribute 可插入(CanInsert)、可更新(CanUpdate);#99

v0.10.3

  • 增加 NavigateAttribute 特性对应的 Fluent 功能;#96

v0.10.2

  • 修复 Pgsql string[] 属性表达式 Contains 缺少类型转换的 SQL 语法错误;

v0.10.1

  • 优化 IUpdate.IgnoreColumns/UpdateColumns 可对属性名,或字段名做设置;#95
  • 优化 忽略 List<T> 作为 Curd 类型操作;

v0.9.18

  • 增加 PostgreSQL 的 Odbc 访问提供,相比 FreeSql.Provider.PostgreSQL 支持的类型更少;
  • 增加 通用的 Odbc 访问提供,不能迁移实体到数据库,不能 Skip 这样来分页,理论上能 crud 所有 odbc 数据库;

v0.9.17(ODBC)

  • 增加 FreeSql.Provider.Odbc,实现 Oracle/SqlServer/MySql 的 Odbc 访问提供;
  • 增加 FreeSqlBuilder.UseConnectionString 参数 providerType,可解决因包版本冲突时,可能无法反射获得 FreeSql.Provider 对应的类型,通常这个参数不需要设置;
  • 优化 MaxLength 特性,当指定为 -1 时 DbType 会分别映射类型 text/nvarchar(max)/nvarchar2(4000);

v0.9.16

  • 增加 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
  • 修复 Lambda 表达式中 DateTime.Now.ToString("yyyyMMdd") 不能直接执行的 bug;

v0.9.15

  • 增加 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; }
}
  • 优化 表达式解析未实现的错误提醒,如 $"";

v0.9.12

  • 增加 MaxLength 特性的解析,实体字符串长度设置;
class Topic {
    [MaxLength(128)]
    public string Title { get; set; }
}

v0.9.11

  • 增加 ISelect.ToChunk 实现分块查询数据,减少数据过大时内存占用;

v0.9.10

  • 移除 FreeSql.Repository 扩展方法 FromRepository;
  • 调整 ISelect.AsTable 规则,每一次使用将增加 UNION ALL 查询;
  • 优化 AsTable UseSyncStructureToLower/ToUpper 设置,兼容 AsTable((t,o) => "(select * from tb)");

v0.9.9

  • 修复 AsTable 不受 UseSyncStructureToLower/ToUpper 设置的 bug;

v0.9.8

  • 增加 AsTable 多次,可查询分表后的多个子表记录,以 UNION ALL 形式执行;
  • 完善 ExpressionTree DateTime/DateTimeOffset 数据转换测试;
  • 优化 ISelect`1.Include之后ToList参数includeNestedMembers默认为true;
  • 修复 属性无set自动忽略的bug;

v0.9.7

  • 修复 批量更新 bug,当某行某字段值为null,其他行的该字段也更新成了null;【重大 bug】

v0.9.6

  • 优化 表达式对整数除法的处理,解析为整除;
  • 优化 MapType DateTime/DateTimeOffset 类型转换互通;

v0.9.5

  • 增加 创建表时指定字段位置,如:[Column(Position = 1],可为负数即反方向位置;

v0.9.4

  • 修复 导航属性配置,循环关系的情况下可能导致的 bug;

v0.9.3

  • 修复 导航属性配置和Aop冲突的 bug;

v0.9.2

  • 修复 Aop.AuditValue 与 FreeSql.Repository 主键状态管理的冲突;

v0.9.1

  • 增加 ISelect.First() 方法;
  • 修复 MapType 表达式解析时的层级 bug,可能出现 ExpressionTree 类型错误;

v0.8.11

  • 增加 Aop.AuditValue 事件,在插入/更新数据时审计属性值,wiki

v0.8.10

  • 修复 Pgsql 批量更新使用 NoneParameter 后日期类型的语法 bug;
  • 修复 Oracle DbFirst 大小写问题没正确获取列对应 CsType 值的 bug;

v0.8.8

  • 优化 导航属性的关系,友好支持 int/int? 映射;
  • 修复 IncludeMany 变异 Where 指定的属性类型不一致的 bug;(如 int 和 int?)

v0.8.7

  • 修复 导航关系多属性时的错序 bug;
  • 修复 延时属性的类,没有设置Namespace时的 bug;

v0.8.6

  • 补充 使用 IsIgnore 忽略后,表达式再使用时的友好错误提示;
  • 优化 DbContext/Repository 局部调整;
  • 修复 DbContext.Save 只查询不更新的bug;

v0.8.5

  • 修复 ISelect.WhereCascade 当内部使用 (a as BaseEntity).TenantId 时报错的 bug;
  • 修复 ISelect Sum/First 子查询时,若子查询实体类与主查询一样时,导致的 bug;

v0.8.4

  • 修复 IUpdate.Set 表达式传入匿名类更新多个字段,后表达式未加[]或""的 bug;
  • 修复 Aop.ConfigEntityProperty 操作导航属性后,执行 insert 语句认为它也是字段的 bug;

v0.8.3

  • 增加 FreeSql.Provider.Oracle 下的 OraclePrimaryKeyName 特性,手工设置主键名防止默认名过长问题;
  • 修复 查询重复数据时使用 IncludeMany 出现字典重复添加的 bug;(如一对多使用LeftJoin查询,主实体查询出了重复的数据)
  • 补充 ISelect`T1...T10 LeftJoin/InnerJoin/RightJoin 多参数方法;

v0.8.2

  • 修复 Oracle 表达式 DateTime.Subtract(DateTime) 解析 bug;
  • 增加 IFreeSql.Select`T1...T10 的多表查询扩展方法;
  • 增加 表达式函数 string.IsNullOrWhiteSpace 解析;
  • 优化 内部实体管理的默认值,防止导航属性使用抽象类/接口时出现错误;

v0.8.1

  • 优化 表达式中不能使用 c# 函数的问题,

如:where(a => HttpContext.Session.GetString("UserID") == a.UserId)

  • 优化 IUpdate.Set 表达式传入匿名类更新多个字段;
  • 优化 IInsert.InsertIdentity 可插入自增属性;
  • 修复 Oracle CodeFirst 使用 OldName 迁移自增字段时,未删除旧的触发器和序列的 bug;

v0.7.16

  • 增加 UnitOfWork.Current 静态属性,AsyncLocal 实现 [NETStandard 2.0];
  • 修复 CodeFirst 迁移代码注释到数据库,继承的基类未生效的 bug;

v0.7.15

  • 优化 ExpressionTree 类型转换的友好错误提示;
  • 修复 SqlServer IUpdate.ExecuteUpdated 拼接SQL bug;

v0.7.13

  • 增加 ISelect.WhereCascade 实现多表查询时,向每个表中附加条件; wiki
  • 增加 表达式对基类转换的解析,如:Where(a => (a as BaseEntity).IsDeleted == true);
  • 增加 Examples 项目 base_entity,利用 BaseEntity 实现简洁的数据库操作;

v0.7.12

  • 修复 .From 多表查询别名的匹配 bug;
  • 修复 SqlServer 未处理字符串前面加N 的 bug;
  • 增加 子查询判断,如果使用了相同 ISelect 会死循环;
  • 增加 连接字符串错误时的友好提示;

v0.7.9

  • 补充 Navigate(ManyToMany = typeof(中间表)) 多对多自定义配置;
  • 修复 LambadaExpressionExtensions 扩展方法 And/Or 当存在二级 lambada 时替换错误的 bug;

如:where.Add(a => a.Tags.Any(b => ...)),b 替换错误

v0.7.8

  • 增加 子查询函数 First、Count、Min、Max、Sum、Avg 的支持 #wiki
  • 补充 Oracle DbFirst raw 等类型映射处理,其他未处理的类型将映射为 string;

v0.7.6

  • 优化 表达式 true && ... 解析的处理;
  • 优化 Navigate 指定联合键关系时,对属性顺序的要求,当类型不一样、名称一样时无须指明属性的顺序,如:[Navigate("MemberId, ShopId")];

v0.7.5

  • 修复 Insert/Update 大批量操作分批执行时,如果外部使用了 Ado.Transaction,没有使用线程事务对象,而是创建了新事务的 bug;

v0.7.4

  • 修复 Insert ClearData 重复利用的 bug(使用 IgnoreColumns 进行大批量插入时会发生);

v0.7.3

  • 修复 ISelect.From<T2, T2> 当传入相同的两个实体类型,可能导致内部 Join 无法匹配的 bug;
  • 增加 IGroupSelect ToSql(string) 重载方法;
  • 修复 根据代码注释,迁移到数据库备注,当实体类属于 .exe 程序集时的 bug:System.Xml.XmlException:“根级别上的数据无效。 第 1 行,位置 1。”

v0.7.1

  • 修复 .From.GroupBy Item2 以上元组参数未查找到的 bug #63;
  • 合并 FreeSql.DbContext 项目至 FreeSql;

v0.6.13

  • 增加 表达式 .HasValue 和 !.HasValue 的解析支持;
  • 增加 表达式 DateTime - DateTime 和 DateTime - TimeSpan 的解析支持;
  • 修复 0.6.12 IUpdate.Set 表达式解析的 bug;

v0.6.12

  • 增加 LambdaExpression 扩展方法 And/Or/Not 快速拼接表达式;
  • 优化 IUpdate.Set 支持 Set(a => new { Clicks = a.Clicks + 1, Time = DateTime.Now }) 指定多个字段更新的用法;

v0.6.11

  • 增加 CodeFirst 根据代码注释,迁移到数据库备注(需要实体类所在项目开启xml生成功能);

v0.6.10

  • 增加 TableAttribute 特性属性 DisableSyncStructure,当实体对应的是视图时,可使用本功能禁用迁移;
  • 增加 FreeSqlBuilder UseEntityPropertyNameConvert() 全局转换实体属性名方法 #60

v0.6.9

  • 修复 批量插入/更新大量数据时,未使用NoneParameter,会导致部分未执行的bug;

v0.6.8

  • 处理 非正常 Provider GC 可能为 null 的错误;
  • 修复 Aop.ParseExpression 使用 FreeParse 方法死循环的 bug;
  • 增加 ISelect.OrderBy 重载,与 WhereIf 相同行为;

v0.6.6

  • 适配 FreeSql.Provider.MySqlConnector,和它对应的266个单元测试;

v0.6.5

  • 增加 NavigateAttribute 配置导航关系;
  • 修复 LinqToSql 方法,开启自动迁移时,迁移了无关类的 bug;
  • 修复 Oracle DbFirst date(7) 类型未处理的 bug;
  • 修复 AsSelect().Any() 未给其他条件时,产生 null bug;
  • 修复 子查询使用非表达式方法时,参数无效的 bug;
  • 增加 FreeSql.Extensions.LazyLoading 对 .net 4.5 的支持;
  • 优化 MySql CodeFirst 增加 DateTime 迁移后,默认值为 0000-00-00 导致读取失败的 bug;
  • 优化 LazyLoading 友好错误提示;

v0.6.3

  • 补充 当初始化 ConnectionString 参数为空时,给出友好错误提示;
  • 修复 IUpdate.IngoreColumns/UpdateColumns 若实体指定别名后,可能无效的bug;

v0.6.2

  • 增加 FreeSql.Provider.MySqlConnector 实现包;
  • 修复 mysql CodeFirst enum/set 小写时,对 MySqlConnector 不友好的 bug;

v0.6.1(拆解 FreeSql)

  • 各数据库单独包、延时加载包;
  • FreeSql.Extensions.LazyLoading
  • FreeSql.Provider.MySql
  • FreeSql.Provider.PostgreSQL
  • FreeSql.Provider.SqlServer
  • FreeSql.Provider.Sqlite
  • FreeSql.Provider.Oracle
  • 移除 IFreeSql.Cache,以及 ISelect.Caching 方法;
  • 移除 IFreeSql.Log,包括内部原有的日志输出,改为 Trace.WriteLine;
  • IAdo.Query<dynamic> 读取返回变为 List<Dictionary<string, object>>;
  • 定义 IFreeSql 和以前一样,移除了 UseCache、UseLogger 方法;

v0.5.23

  • 补充 IUpdate.Set(a => a.Click == 10),简化 Set 更新单个字段表达式;
  • 优化 延时导航属性的错误提醒,当无法匹配错误,转到重写类 get 时抛出(实现延时导航属性,与普通导航一起使用);
  • 优化 ICodeFirst.SyncStructure 错误提示,当使用不可迁移实体时;
  • 优化 实体数据属性 DbDefaultValue 处理;
  • 修复 Expression 表达式解析 Convert 的判断 bug;

v0.5.21

  • 修复 IncludeMany ManyToMany,若中间表未使用 延时加载 属性功能时,出现的 bug;
  • 增加 IncludeMany Take(5) 功能,实现每个子集合只取5条记录;

v0.5.19

  • 增加 ISelect.Include 贪婪加载第一版,已通过集合的导航数据加载,包括 OneToMany/ManyToMany;
  • 修改 IncludeMany ManyToMany ET 缓存的 bug;
  • 完善 IncludeMany 联合键处理;
  • 完善 Include/IncludeMany 单元测试;
  • 修复 Include 延时加载 ManyToOne/OneToOne,当值为 null 时,仍然会查询一次数据;
  • 修改 Query/ToList 混合使用时,可能导致的 ET 缓存 bug;
  • 修改 Query 查询的实体设置了 IsIgnore 时,可能出现 ET 读取位置偏移 bug;
  • 增加 变异的 IncludeMany,即使不是导航属性,也可以贪婪加载,Wiki

v0.5.12

  • 优化 连接预热策略:min pool size 不设置或 <= 0,则默认预热 5个;也可以设置 1;
  • 取消 MySql CodeFirst 对表字符集的设置;
  • 增加 ToList() 方法,作用与 ToList(a => new Dto()) 相同;

v0.5.11

  • 修复 复杂的表达式解析 OR 的括号 bug;
  • 增加 linq to sql 的查询语法,以及单元测试,wiki
  • 补充 IFreeSql 增加与实现 IDisposable 接口(依然要保持单例的使用习惯);
  • 增加 CurdBefore、CurdAfter AOP 事件,可监控执行增删查改;
  • 增加 SyncStructureBefore、SyncStructureAfter AOP 事件,可监控CodeFirst迁移;

v0.5.7

  • 补充 nuget 包增加 xmlDoc 编译,原来使用者之前一直没有注释;
  • 调整 Column.Unique 定义规则,解决同一属性不可配置多次的问题;
  • 优化 兼容不同数据库 bool 的表达式解析,如:Where(a => a.Bool)、Where(a => !a.Bool);

v0.5.5

  • 增加 Column.MapType 类型映射,可将 enum 映射为 int/string 等;
  • 增加 Column.Unique 唯一键,多个属性指定相同的标识,代表联合键,#42
  • 增加 Expression string.Concat,#39
  • 补充 Expression IEnumerable<T>.Contains 的支持,之前只能数组或IList;
  • 补充 IDbFirst GetTableByDatabase 返回 uk/fk/index 名称,以便迁移;
  • 补充 MapType/Unique 单元测试;
  • 优化 PostgreSQL jsonb 类型使用习惯;

v0.5.4(青年版)

  • 修复 Expression OrElse 两侧括号丢失的 bug;
  • 修复 Expression DateTime 类型 CompareTo 在 MySql/SqlServer 下的 bug;
  • 修复 ISelect.ToList(true) 无效的 bug;
  • 增加 IAop.ConfigEntity 配置实体特性,可实现使用其他 ORM 的实体特性,#36
  • 优化 ISelect.GroupBy 查询,增加 .Value 实现聚合源字段查询,ToList(a => a.Sum(a.Value.Score)),#38

v0.5.3

  • 增加 ISelect.ToList(true) 贪婪加载 LeftJoin/InnerJoin/RightJoin 导航数据;
  • 增加 IAdo.Query<T1, T2 ...> 多结果集查询;
  • 增加 IAdo.ExecuteDataSet 多结果集查询;
  • 优化 未设置实体属性 set 的将被自动过滤 IsIgnore;

v0.5.2

  • 修复 SqlServer 工作单元 bug,需要同时设置 SqlCommand.Connection + Transaction;
  • 补充 测试与支持联合主键的自增;

v0.5.1(五一版)

  • 增加 ISelect/IInsert/IUpdate/IDelete.AsType 实现弱类型curd,如:Select<object>().AsType(实体类型);

  • 补充 ISelect.From<T2>;

  • 补充 ExpressionTree 单元测试;

  • 优化 ToList(a => new Dto()),会按优先级查询 Join 实体属性;

  • 补充 IDelete/ISelect/IUpdate WhereDynamic 方法,实现 dywhere 条件;

  • 修复 WhereObject 内部方法,当开启 Lazy 延时属性时,并且传递实体查询时条件无效;

  • 补充 实现表达式转换类型的解析,如:Select<object>().Where(a => (a as 实体类型).Id == 0);

  • 完善 ExpressionTree 基础数据类型 TryParse 使用与单元测试;

  • 优化 ManyToMany 中间实体未配置主键时,自动配置联合主键;

  • 修复 Expression.And 的使用问题;

  • 修复 IsIgnore 过滤字段后,查询的错误;

  • 修复 ISelect2 以上 WhereIf 条件作用反了 bug;

v0.4.15

  • 优化内部 QuoteSqlName 方法;当参数值是 (xxx),则直接返回原形。如:xxx => [xxx],(max(1)) => (max(1));

可实现功能,如:orm.Select<xxx>().AsTable((a,b) => "select * from xxx").Page(1, 20).ToSql()

  • 增加 Oracle IDbFirst 接口实现;
  • 补充 开放 IUpdate UpdateColumns 方法功能,现实更新实体时,只更新指定的列(与 IgnoreColumns 对应);

v0.4.13

  • 优化 MySql 日期类型精确至毫秒;
  • 增加 Distinct 查询前去重数据;

v0.4.12

  • 增加 First/FirstAsync 指定字段查询的重载方法;
  • 调整 FreeSql.Repository 直接引用 FreeSql.DbContext 内的仓储实现;
  • 移动 FreeSql.Repository 至 FreeSql.DbContext;
  • 补充 单独针对 MySql 枚举类型的单元测试;

v0.4.11

  • 修复 .ToList(a => a.id) 当 id 是 guid 类型时,会出现类型转换失败 bug;

v0.4.10

  • 优化 连接池对象预热效率,开启每10个线程进行预热,预热时间超过3秒则放弃;
  • 修复 MySql 枚举表达式 == 解析成数字的 bug;
  • 补充 IAdo 相关方法,实现 FreeSql.Connection.Extensions 扩展包,像 Dapper 的使用习惯;

v0.4.9

  • 修复 pgsql Enum 类型 formatSql bug;
  • 补充 表达式解析 Equals 为 = #28 #29

v0.4.5(清明版本)

  • 优化 IFreeSql.Transaction 可嵌套连续使用,之前会死锁;
  • 修复 导航属性的关系,误将 ManyToOne 设置成了 OneToMany;
  • 补充 DbFirst GetTablesByDatabase 获取表备注;
  • 补充 ISelect.ToList(a => new XxxDto { XxxId = a.Id, ... }) 支持,之前只能支持匿名类;
  • 补充 扩展 IUpdate.Set(a => a.Title + "111") 指定字段在原基础上增加值的范围,之前只支持数字类型的累加;

v0.4.1

v0.3.27

  • 增加 行级锁功能,适用修改实体,参考资料
  • 增加 FreeSql.Repository 默认依赖注入的方式,同时保留原有 Autofac;
  • 优化 FreeSql.Repository Insert 逻辑,参考了 FreeSql.DbContext;
  • 优化 FreeSql.IUpdate 参照 IInsert 对大批量更新,拆分执行;
  • 修复 FreeSql.IInsert ClearData 重复利用的 bug(使用 IgnoreColumns 进行大批量插入时会发生);

v0.3.26

  • 修复 SqlServer CodeFirst 迁移联合主键的 bug #23

v0.3.25

  • 修复 全局过滤器一个赋值低级错误;
  • 增加 IFreeSql<TMark> 空接口,现实多个 IFreeSql 注入使用,使用泛型标识区分;

v0.3.24

  • 增加 GroupBy 分页方法;
  • 修复 Insert 参数化命名 bug,当存在 Id Id2 时发生;
  • 优化 Insert/Delete/Update 对象执行完后清理数据,以备多次使用;

v0.3.23

  • 修复 因功能增加,导致联表查询出现的表达式函数解析 bug;
  • 修复 因功能增加,导致查询数据时,ExpressionTree bug;

v0.3.22

  • 优化 导航属性 ManyToOne 名称查找规则;
  • 增加 IFreeSql.Aop 属性,未来所有拦截方法都在这里,第一期支持如下:
    • 监控 ToList 返回的的数据,用于拦截重新装饰;
    • 监视 Where,包括 select/update/delete,返回值 true 时可使上层不被执行;
    • 可自定义解析表达式;
  • 增加 ISelect.TractToList,用于单次跟踪或审核实体;
  • 优化 FreeSql.DbContext SaveChanges;

v0.3.21

  • 增加 IUpdate IgnoreColumns 重载方法,支持传入字符串数组忽略修改;
  • 完善 FreeSql.DbContext,支持对象操作 + SaveChanges 最后保存操作;

v0.3.20

  • 修复 ToList 选择指定对象时,应附加所有字段查询返回;
  • 修复 Lazy 延时类与实体关系冲突 bug;
  • 修复 附加对象读取时,记录为空应该返回null,而不是返回非null(字段默认值)对象;

v0.3.19

  • 兼容 GetTableByEntity 有可能因为传入数组类型的错误;
  • 修复 UnitOfWork 事务创建逻辑 bug;
  • 增加 FreeSql.DbContext 扩展包;
  • 调整 UnitOfWork、DbContext 不提交时默认会回滚;

v0.3.18

  • 增加 IInsert 对数组传入的支持,之前是 IEnumerable;
  • 增加 ORM 性能测试项目 Examples/orm_vs;

v0.3.17

  • 修复 SqlServer DbFirst 数据库名传入带小数点的 bug #18
  • 修复 ILIst.Contains Expression #16
  • 整理 延时加载/导航属性查询的对象关系,仍然不依赖外键;
  • 完成 OneToOne/ManyToOne、ManyToMany/OneToMany 导航属性的查询 #15
  • 增加 IEnumerable 扩展方法 AsSelect,转成 ISelect,以便使用 FreeSql 的查询功能;
  • 增加 int.Parse Guid.Parse 系列转换、Guid.NewGuid、new Random.NextDouble 等表达式函数解析;

v0.3.16

  • 修复 IInsert/IUpdate.NoneParameter() 设成了反作用的 bug;
  • 修复 IDbFirst.GetTablesByDatabase() 默认数据库 bool 判断 bug;
  • 增加 FreeSql.Repository 之 IUnitOfWork 实现,查看参数资料
  • 增加 FreeSql.Repository 继承实现的仓储注入;
builder.RegisterFreeRepository(
    filter => filter.Apply<Song>("test", a => a.Title == DateTime.Now.ToString() + 
        Thread.CurrentThread.ManagedThreadId), 
    this.GetType().Assembly
);

v0.3.15

  • 增加 ISelect.ToDataTable 系列方法;
  • 增加 无参数化命令执行,可配置全局 ICodeFirst.IsNoneCommandParameter、或临时 IInsert/IUpdate.NoneParameter() 便于调试;
  • 关闭 自动同步结构功能,避免线上环境误操作;
  • 优化 IInsert 批量插入容易导致 values 过多、或参数化过多的问题,5个数据库均已优化;

v0.3.14

  • 解决 SqlServer 批量添加容易导致的错误:传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。原理为拆成多个包用事务执行;

v0.3.13

  • 修改 FreeSql.Repository Autofac 注入方式,真正的实现全局过滤功能;
  • 增加 FreeSql.Repository DataFilter 属性;
repos.DataFilter.Disable("test") 临时禁用,不影响全部;
repos.DataFilter.DisableAll()
repos.DataFilter.Enable("test")
repos.DataFilter.EnableAll()
repos.DataFilter.Apply("name", a => a.Id > 1) 附加新的过滤器
  • 增加 using DataFilter.Disable、Enable 使用完成后恢复可用状态;

v0.3.12

  • 增加 ICodeFirst.IsConfigEntityFromDbFirst,若无配置实体类主键、自增,可从数据库导入;

v0.3.11

  • 增加 ISelect、IInsert、IUpdate、IDelete WithTransaction 方法,将事务对象暴露给外部;
  • 增加 IAdo ExecuteXxx 系列方法重载,支持事务对象的传入;

v0.1.14

  • 增加 延时属性编译的错误提示;
  • 优化 FreeSql.Repository Autofac 泛型注入;

v0.1.13

  • 修改 连接池内部 Ping Timeout 值暂定 5秒;
  • 优化 初始化时若数据库超时,则放弃预热;
  • FreeSql.Repository 下增加 ISelect.FromRepository 扩展方法,实现快速合并多个仓储查询;
  • 增加 FreeSql.Repository Autofac 泛型注入,支持实现全局过滤;
  • 补充 GuidRepository 插入数据时,根据 filter 参数设定进行数据验证;

v0.1.12

  • 升级 nuget 依赖包;
  • 增加 .netframework 4.6.1 示范项目;
  • PostgreSQL 连接池大小默认值改为 50;
  • ISelect 增加 Any/AnyAsync(Expression),为的少写一个 Where;
  • 关闭 CSScriptLib Debug 编译,防止权限错误;

v0.1.11

  • FreeSql ISelect/IUpdate/IInsert/IDelete 增加 AsTable 方法,实现分表;
  • FreeSql.Repository 之 GuidRepository 实现分表扩展,原因系 Guid 适合作分布式存储;

v0.1.10

  • 修复 FreeSql.Repository GuidRepository/GetGuidRepository 缓存 bug;
  • 修复 Lazy 延时加载在 linux 发布后产生 Bad IL Format bug;

v0.1.9

  • 优化插入判断主键,且为 Guid/Guid? 类型,并且值为 null/Guid.Empty 时,将插入的值变为 FreeUtil.NewMongodbId();

v0.1.8

  • 升级 nuget 依赖包;

v0.1.7

  • FreeSql.Repository 增加 filter 参数,现实数据过滤 + 验证; 如:var postRepos = fsql.GetGuidRepository(a => a.TopicId == 1); postRepos CURD 方法都会以 lambda 条件作为查询或验证,Update/Insert验证错误时会抛出异常。
  • ISelect 增加 First/FirstAsync;

v0.1.6

  • 修复 外部配置实体ConfigEntity 与 延时加载 冲突产生的 bug;

v0.1.5

  • 删除 IsQuoteSqlName 参数配置;
  • 增加 IsSyncStructureToUpper 参数配置,以便适应 Oracle 大小写使用习惯;
  • FreeSql.Repository 增加 GuidRepository 类,适用 Insert 方法无须返回插入的数据;
  • FreeSql.Repository 增加 IFreeSql 扩展方法 GetRepository、GetGuidRepository;

v0.1.4

  • 修复 SqlServer CodeFirst 迁移结构时,因日期默认值的语法错误;
  • 判断 SqlServer 服务器版本,选择分页模式 row_number 或 offset fetch next;

v0.1.3

  • FreeSql.Repository Insert 方法判断数据库类型,由于 MySql/Oracle/Sqlite 不支持 returning 或 output 类型的特性,因此不作现实定义为 virtual 交给外部(不包括 PostgreSQL/SqlServer);

v0.1.2

  • 增加 sqlserver2012 offset fetch next 的分页方式;
  • 增加 ICodeFirst.GetConfigEntity 方法;

v0.1.1

  • 增加选项 IsQuoteSqlName 控制是否使用 [] 或 "" 或 `` 包含数据库名称 #6

v0.1.0

  • 增加 FreeSql.Repository 扩展库,现实实体类的默认仓储;
  • 增加主键命名约定:在没有设置主键的情况下,Id 或 <type name>Id 或 <type name>_Id 或 自增列 会成为主键;
  • 实体特性 Column 增加 IsIgnore 忽略达到不映射的目的;
  • 增加 repository_01 示例项目,演示 FreeSql.Repository;
  • 增加 website FreeSql 官方项目源码;

v0.0.14

  • ICodeFirst.ConfigEntity 可更新实体配置已缓存的数据;
  • 防止同连接字符串被IFreeSql使用多次,发生连接池溢出bug(ado.net连接池原理,减少解释成本);
  • 增加 efcore_to_freesql 示例项目,现实与 EFCore 实体共存;

v0.0.13

  • 修复和丰富 ICodeFirst.ConfigEntity 方法;
  • 增加 FreeSql.Extensions.EFCoreModelBuilder 扩展库,现实与 EFCore 实体共存 #4
  • 增加 restful 示例项目;

v0.0.12

  • lazy延时属性父子关系的1v多类型判断修正,解决 int? != int 的 bug;
  • ThreadLocal修改使用方式;
  • 使用 virtual 后实体序列化问题 #5,私有化属性;
  • 由于FreeSql采用二次封装连接池,尽量避免使用问题,真实的max pool size值等于传入值+1;

v0.0.11

  • 修复IAdo.Query直接查询sql的bug;
  • 重新检查通过所有单元测试;
You can’t perform that action at this time.