diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 07018199..59f12a2c 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -646,10 +646,11 @@ namespace base_entity .ToSql(); var astsql03 = fsql.Select() - .Where(a => a.createtime < DateTime.Parse("2023-5-1")) - .FromQuery(fsql.Select()) - .InnerJoin((a, b) => a.id == b.id) - .OrderBy((a, b) => a.createtime) + .Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2023-5-1"))) + .WithTempQuery(a => a) + .FromQuery(fsql.Select().Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2023-5-1")))) + .InnerJoin((a, b) => a.id == b.id) + .OrderBy((a, b) => a.createtime) .ToSql(); var astsql04 = fsql.Select() diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 594fbad3..26522f10 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -733,6 +733,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 @@ -791,5 +800,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.OracleOledb/OracleOledb/Curd/OracleOledbSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.OracleOledb/OracleOledb/Curd/OracleOledbSelectTest.cs index 107442af..a433290a 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.OracleOledb/OracleOledb/Curd/OracleOledbSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.OracleOledb/OracleOledb/Curd/OracleOledbSelectTest.cs @@ -720,10 +720,16 @@ WHERE (((a.""NAME"") in (SELECT s.""TITLE"" as1 } [Fact] public void WhereIf() - { - //����е�������a.Type��a.Type.Parent ���ǵ������� - var query = select.WhereIf(true, a => a.Id == 10); + { + var time = DateTime.Parse("2023-12-12"); + var query = select.Where(x => x.CreateTime == time); var sql = query.ToSql().Replace("\r\n", ""); + Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"CREATETIME\" = to_timestamp('2023-12-12 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6'))", sql); + query.ToList(); + + //����е�������a.Type��a.Type.Parent ���ǵ������� + query = select.WhereIf(true, a => a.Id == 10); + sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"ID\" = 10)", sql); query.ToList(); diff --git a/Providers/FreeSql.Provider.Oracle/OracleProvider.cs b/Providers/FreeSql.Provider.Oracle/OracleProvider.cs index 92792c51..31c19a95 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleProvider.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleProvider.cs @@ -1,18 +1,17 @@ using FreeSql.Internal.CommonProvider; using FreeSql.Oracle.Curd; using System; -using System.Data.Common; -using System.Text.RegularExpressions; -using System.Collections.Concurrent; -using System.Threading; -using System.IO; using System.Collections.Generic; +using System.Data.Common; +using System.Linq; using System.Reflection; +using System.Text.RegularExpressions; +using System.Threading; namespace FreeSql.Oracle { - public class OracleProvider : BaseDbProvider, IFreeSql + public class OracleProvider : BaseDbProvider, IFreeSql { public override ISelect CreateSelectProvider(object dywhere) => new OracleSelect(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IInsert CreateInsertProvider() => new OracleInsert(this, this.InternalCommonUtils, this.InternalCommonExpression); @@ -44,7 +43,23 @@ namespace FreeSql.Oracle this.Aop.CommandBefore += (_, e) => { if (e.Command.Parameters.Count > 0) - e.Command.CommandText = _regCommandText.Replace(e.Command.CommandText, "?"); + { + var dbparms = new DbParameter[e.Command.Parameters.Count]; + e.Command.Parameters.CopyTo(dbparms, 0); + var cmdText = e.Command.CommandText; + var ischanged = false; + foreach(var dbparm in dbparms.OrderByDescending(a => a.ParameterName.Length)) + { + if (dbparm.ParameterName[0] != ':') continue; + var idx = cmdText.IndexOf(dbparm.ParameterName); + if (idx != -1) + { + ischanged = true; + cmdText = $"{cmdText.Substring(0, idx)}?{cmdText.Substring(idx + dbparm.ParameterName.Length)}"; + } + } + if (ischanged) e.Command.CommandText = cmdText; + } }; this.Aop.AuditDataReader += (_, e) =>