From 6ab7766d74e56709c38362772f3e7f74528163c0 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 6 Jun 2023 11:23:25 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=203.2.696=20=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=86=E8=A1=A8=20bug=EF=BC=9B#1527=20e79860164d5d1?= =?UTF-8?q?2e4f7df747f0e29503dff301cb7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 195 +++++++++--------- FreeSql/FreeSql.xml | 98 +++++++++ .../Internal/CommonProvider/DeleteProvider.cs | 4 +- .../Internal/CommonProvider/UpdateProvider.cs | 4 +- 4 files changed, 203 insertions(+), 98 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index d79842c0..b08598d3 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -601,113 +601,21 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion - var iouSetSql01 = fsql.InsertOrUpdate() - .SetSource(Enumerable.Range(0, 5).Select(a => new User1 { Id = Guid.NewGuid(), Nickname = $"nickname{a}", Username = $"username{a}", Description = $"desc{a}" }).ToArray()) - .UpdateSet((a, b) => a.Sort == b.Sort + 10) - .UpdateSet((a, b) => a.Nickname == "xxx") - .ToSql(); + var sqlastable1 = fsql.Select(101).AsTable((t, o) => "current_detail_230501").ToSql(); var sqlastable2 = fsql.Update(101).AsTable("current_detail_230501").Set(t => t.StatuId, 1).ToSql(); var sqlastable3 = fsql.Delete(101).AsTable("current_detail_230501").ToSql(); - fsql.Delete().Where("1=1").ExecuteAffrows(); - var longRawData = Encoding.UTF8.GetBytes(string.Join(",", Enumerable.Range(1, 2000).Select(a => "中国人"))); - fsql.Insert(new OracleLongRaw1 { data = longRawData }).NoneParameter(false).ExecuteAffrows(); - fsql.Insert(new OracleLongRaw1 { data = longRawData }).NoneParameter(true).ExecuteAffrows(); - var longRaw1 = fsql.Select().ToList(); - - MarketingRestrictions restrictions = new MarketingRestrictions(); - - if (restrictions.Id == Guid.Empty) - { - restrictions.CreatedBy = 100; - } - else - { - restrictions.UpdatedBy = 100; - restrictions.UpdatedTime = DateTime.Now; - } - - int ret = fsql.InsertOrUpdate() - .SetSource(restrictions) - .UpdateColumns(r => new { - r.Describe, - r.IsLimitUsePoints, - r.Status, - r.StartTime, - r.EndTime, - r.UpdatedBy, - r.UpdatedTime - }) - .ExecuteAffrows(); - - - var query2222 = fsql.Select() - .AsTable((t, o) => string.Format(o, "hash2")) - .Where(p => p.Name.Contains("search")) - .GroupBy(a => new { a.ClassId }) - .WithTempQuery(a => a.Key); -var sql11111 = fsql.Select() - .AsTable((t, o) => string.Format(o, "hash1")) - .Where(s => query2222 - .ToList(p => p.ClassId) - .Contains(s.Id)) - .ToSql(s => new - { - s.Id, - s.Name, - }); - - var isusers01 = fsql.Select() - .Where(e => e.Property("项目执行情况") == "结题") - .GroupBy(e => new { ProjectLevel = e.Property("项目级别") }) - .ToSql(e => new - { - e.Key.ProjectLevel, - Test = e.Value.Group.Property("批准经费总额(万元)"), - }); - isusers01 = fsql.Select() - .Where(e => e.Property("项目执行情况") == "结题") - .GroupBy(e => new { ProjectLevel = e.Property("项目级别") }) - .WithTempQuery(e => new - { - e.Key.ProjectLevel, - Test = e.Value.Group.Property("批准经费总额(万元)"), - }) - .ToSql(); - - var bulkUsers = new[] { - new IdentityUser1 { Nickname = "nickname11", Username = "username11" }, - new IdentityUser1 { Nickname = "nickname12", Username = "username12" }, - new IdentityUser1 { Nickname = "nickname13", Username = "username13" }, - - new IdentityUser1 { Nickname = "nickname21", Username = "username21" }, - new IdentityUser1 { Nickname = "nickname22", Username = "username22" }, - new IdentityUser1 { Nickname = "nickname23", Username = "username23" } - }; - fsql.Insert(bulkUsers).NoneParameter().ExecuteAffrows(); - fsql.Insert(bulkUsers).IgnoreInsertValueSql(a => a.Nickname).NoneParameter().ExecuteAffrows(); - bulkUsers = fsql.Select().OrderByDescending(a => a.Id).Limit(3).ToList().ToArray(); - bulkUsers[0].Nickname += "_bulkupdate"; - bulkUsers[1].Nickname += "_bulkupdate"; - bulkUsers[2].Nickname += "_bulkupdate"; - fsql.Update().SetSource(bulkUsers).ExecuteSqlBulkCopy(); - - - var objtsql1 = fsql.Select().WithSql("select * from user1").ToList(); - var objtsql2 = fsql.Select().WithSql("select * from user1").ToList(); - var astsql = fsql.Select() .InnerJoin((a, b) => a.id == b.Id) - .OrderBy((a,b) => a.createtime) + .OrderBy((a, b) => a.createtime) .ToSql(); //var table = fsql.CodeFirst.GetTableByEntity(typeof(AsTableLog)); //table.SetAsTable(new ModAsTableImpl(fsql), table.ColumnsByCs[nameof(AsTableLog.click)]); - var testitems = new[] { new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11"), click = 1 }, @@ -725,6 +633,10 @@ var sql11111 = fsql.Select() var sqlat = sqlatb.ToSql(); var sqlatr = sqlatb.ExecuteAffrows(); + //var sqlatc1 = fsql.Delete().Where(a => a.click < 0); + //var sqlatca1 = sqlatc1.ToSql(); + //var sqlatcr1 = sqlatc1.ExecuteAffrows(); + var sqlatc1 = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13")); var sqlatca1 = sqlatc1.ToSql(); var sqlatcr1 = sqlatc1.ExecuteAffrows(); @@ -815,6 +727,101 @@ var sql11111 = fsql.Select() }); + var iouSetSql01 = fsql.InsertOrUpdate() + .SetSource(Enumerable.Range(0, 5).Select(a => new User1 { Id = Guid.NewGuid(), Nickname = $"nickname{a}", Username = $"username{a}", Description = $"desc{a}" }).ToArray()) + .UpdateSet((a, b) => a.Sort == b.Sort + 10) + .UpdateSet((a, b) => a.Nickname == "xxx") + .ToSql(); + + fsql.Delete().Where("1=1").ExecuteAffrows(); + var longRawData = Encoding.UTF8.GetBytes(string.Join(",", Enumerable.Range(1, 2000).Select(a => "中国人"))); + fsql.Insert(new OracleLongRaw1 { data = longRawData }).NoneParameter(false).ExecuteAffrows(); + fsql.Insert(new OracleLongRaw1 { data = longRawData }).NoneParameter(true).ExecuteAffrows(); + var longRaw1 = fsql.Select().ToList(); + + MarketingRestrictions restrictions = new MarketingRestrictions(); + + if (restrictions.Id == Guid.Empty) + { + restrictions.CreatedBy = 100; + } + else + { + restrictions.UpdatedBy = 100; + restrictions.UpdatedTime = DateTime.Now; + } + + int ret = fsql.InsertOrUpdate() + .SetSource(restrictions) + .UpdateColumns(r => new { + r.Describe, + r.IsLimitUsePoints, + r.Status, + r.StartTime, + r.EndTime, + r.UpdatedBy, + r.UpdatedTime + }) + .ExecuteAffrows(); + + + var query2222 = fsql.Select() + .AsTable((t, o) => string.Format(o, "hash2")) + .Where(p => p.Name.Contains("search")) + .GroupBy(a => new { a.ClassId }) + .WithTempQuery(a => a.Key); +var sql11111 = fsql.Select() + .AsTable((t, o) => string.Format(o, "hash1")) + .Where(s => query2222 + .ToList(p => p.ClassId) + .Contains(s.Id)) + .ToSql(s => new + { + s.Id, + s.Name, + }); + + var isusers01 = fsql.Select() + .Where(e => e.Property("项目执行情况") == "结题") + .GroupBy(e => new { ProjectLevel = e.Property("项目级别") }) + .ToSql(e => new + { + e.Key.ProjectLevel, + Test = e.Value.Group.Property("批准经费总额(万元)"), + }); + isusers01 = fsql.Select() + .Where(e => e.Property("项目执行情况") == "结题") + .GroupBy(e => new { ProjectLevel = e.Property("项目级别") }) + .WithTempQuery(e => new + { + e.Key.ProjectLevel, + Test = e.Value.Group.Property("批准经费总额(万元)"), + }) + .ToSql(); + + var bulkUsers = new[] { + new IdentityUser1 { Nickname = "nickname11", Username = "username11" }, + new IdentityUser1 { Nickname = "nickname12", Username = "username12" }, + new IdentityUser1 { Nickname = "nickname13", Username = "username13" }, + + new IdentityUser1 { Nickname = "nickname21", Username = "username21" }, + new IdentityUser1 { Nickname = "nickname22", Username = "username22" }, + new IdentityUser1 { Nickname = "nickname23", Username = "username23" } + }; + fsql.Insert(bulkUsers).NoneParameter().ExecuteAffrows(); + fsql.Insert(bulkUsers).IgnoreInsertValueSql(a => a.Nickname).NoneParameter().ExecuteAffrows(); + bulkUsers = fsql.Select().OrderByDescending(a => a.Id).Limit(3).ToList().ToArray(); + bulkUsers[0].Nickname += "_bulkupdate"; + bulkUsers[1].Nickname += "_bulkupdate"; + bulkUsers[2].Nickname += "_bulkupdate"; + fsql.Update().SetSource(bulkUsers).ExecuteSqlBulkCopy(); + + + var objtsql1 = fsql.Select().WithSql("select * from user1").ToList(); + var objtsql2 = fsql.Select().WithSql("select * from user1").ToList(); + + + var usergroupRepository = fsql.GetAggregateRootRepository(); usergroupRepository.Delete(a => true); usergroupRepository.Insert(new[]{ diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 13464ef2..9dd32b35 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1073,6 +1073,82 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null @@ -5710,6 +5786,28 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and diff --git a/FreeSql/Internal/CommonProvider/DeleteProvider.cs b/FreeSql/Internal/CommonProvider/DeleteProvider.cs index 52279892..a0b8c090 100644 --- a/FreeSql/Internal/CommonProvider/DeleteProvider.cs +++ b/FreeSql/Internal/CommonProvider/DeleteProvider.cs @@ -196,7 +196,7 @@ namespace FreeSql.Internal.CommonProvider } var sb = new StringBuilder(); - if (_table.AsTableImpl != null && _tableRule != null && string.IsNullOrWhiteSpace(_tableRule(_table.DbName)) == true) + if (_table.AsTableImpl != null && string.IsNullOrWhiteSpace(_tableRule?.Invoke(_table.DbName)) == true) { var oldTableRule = _tableRule; var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils); @@ -231,7 +231,7 @@ namespace FreeSql.Internal.CommonProvider } var sb = new StringBuilder(); - if (_table.AsTableImpl != null && _tableRule != null && string.IsNullOrWhiteSpace(_tableRule(_table.DbName)) == true) + if (_table.AsTableImpl != null && string.IsNullOrWhiteSpace(_tableRule?.Invoke(_table.DbName)) == true) { var oldTableRule = _tableRule; var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils); diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 29dfb2aa..ec46e67f 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -1008,7 +1008,7 @@ namespace FreeSql.Internal.CommonProvider ToSqlWhere(newwhere); var sb = new StringBuilder(); - if (_table.AsTableImpl != null && _tableRule != null && string.IsNullOrWhiteSpace(_tableRule(_table.DbName)) == true) + if (_table.AsTableImpl != null && string.IsNullOrWhiteSpace(_tableRule?.Invoke(_table.DbName)) == true) { var oldTableRule = _tableRule; var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils); @@ -1042,7 +1042,7 @@ namespace FreeSql.Internal.CommonProvider ToSqlWhere(newwhere); var sb = new StringBuilder(); - if (_table.AsTableImpl != null && _tableRule != null && string.IsNullOrWhiteSpace(_tableRule(_table.DbName)) == true) + if (_table.AsTableImpl != null && string.IsNullOrWhiteSpace(_tableRule?.Invoke(_table.DbName)) == true) { var oldTableRule = _tableRule; var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);