From 91362ad07ad7e744c0798f527b116d8ad0464523 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 6 Feb 2024 03:56:47 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20WithMemory=20=E5=AF=B9?= =?UTF-8?q?=20InsertValueSql=20=E5=B1=9E=E6=80=A7=E6=97=A0=E6=95=88?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AggregateRootRepository.cs | 3 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- FreeSql/FreeSql.xml | 210 ++++++++++-------- .../CommonProvider/InsertOrUpdateProvider.cs | 4 +- .../SelectProvider/Select1Provider.cs | 2 +- 5 files changed, 118 insertions(+), 103 deletions(-) diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepository.cs b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepository.cs index d13b56f3..33ce0b74 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepository.cs +++ b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepository.cs @@ -119,11 +119,12 @@ namespace FreeSql public ISelect WhereIf(bool condition, Expression> exp) => Select.WhereIf(condition, exp); readonly Dictionary> _childRepositorys = new Dictionary>(); + protected virtual IFreeSql GetChildFreeSql(Type type) => Orm; IBaseRepository GetChildRepository(Type type) { if (_childRepositorys.TryGetValue(type, out var repo) == false) { - repo = Orm.GetRepository(); + repo = GetChildFreeSql(type).GetRepository(); repo.AsType(type); _childRepositorys.Add(type, repo); } diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 7500fffc..e3c654d8 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.812 + 3.2.813-preview20240205 readme.md diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 8f213e5c..489e88dd 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1104,82 +1104,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null @@ -5897,28 +5821,6 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and @@ -6435,3 +6337,115 @@ +`0})"> + + 插入数据,传入实体集合 + + + + + + + + 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: + MySql 5.6+: on duplicate key update + PostgreSQL 9.4+: on conflict do update + SqlServer 2008+: merge into + Oracle 11+: merge into + Sqlite: replace into + 达梦: merge into + 人大金仓:on conflict do update + 神通:merge into + MsAccess:不支持 + 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) + + + + + + + 修改数据 + + + + + + + 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 查询数据 + + + + + + + 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 删除数据 + + + + + + + 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + 事务体 () => {} + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + + 事务体 () => {} + + + + 数据库访问对象 + + + + + 所有拦截方法都在这里 + + + + + CodeFirst 模式开发相关方法 + + + + + DbFirst 模式开发相关方法 + + + + + 全局过滤设置,可默认附加为 Select/Update/Delete 条件 + + + + diff --git a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs index c1bd1705..fcc6cdfb 100644 --- a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs @@ -264,7 +264,7 @@ namespace FreeSql.Internal.CommonProvider return this; } - public void WriteSourceSelectUnionAll(List source, StringBuilder sb, List dbParams) + public void WriteSourceSelectUnionAll(List source, StringBuilder sb, List dbParams, bool disableInsertValueSql = false) { if (_sourceSql != null) { @@ -287,7 +287,7 @@ namespace FreeSql.Internal.CommonProvider foreach (var col in _table.Columns.Values) { if (colidx2 > 0) sb.Append(", "); - if (string.IsNullOrEmpty(col.DbInsertValue) == false) + if (disableInsertValueSql == false && string.IsNullOrEmpty(col.DbInsertValue) == false) sb.Append(col.DbInsertValue); else { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 38589493..5b02908a 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -529,7 +529,7 @@ namespace FreeSql.Internal.CommonProvider if (list.Any() != true) throw new Exception(CoreStrings.Cannot_Be_NULL_Name(nameof(source))); var sb = new StringBuilder(); (_orm.InsertOrUpdate().AsType(_tables[0].Table.Type) as InsertOrUpdateProvider) - .WriteSourceSelectUnionAll(list, sb, _params); + .WriteSourceSelectUnionAll(list, sb, _params, true); try { return WithSql(sb.ToString()); } finally { sb.Clear(); }