DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.19k stars 1.32k forks source link

BulkMerge遺漏右括弧 #1196

Closed Yumitoya8569 closed 9 months ago

Yumitoya8569 commented 9 months ago

SqlSugar 5.1.4.110 Oracle

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00907: 遺漏右括弧
   at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)
   at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, OracleException& exceptionForArrayBindDML, OracleConnection connection, Boolean isFromEF)
   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
   at System.Data.Common.DbCommand.ExecuteNonQueryAsync(CancellationToken cancellationToken)
--- End of stack trace from previous location ---
   at SqlSugar.AdoProvider.ExecuteCommandAsync(String sql, SugarParameter[] parameters)
   at SqlSugar.FastestProvider`1._BulkMerge(List`1 datas, String[] updateColumns, String[] whereColumns)
   at SqlSugar.FastestProvider`1.<>c__DisplayClass29_1.<<BulkMergeAsync>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at SqlSugar.ContextMethods.PageEachAsync[T](IEnumerable`1 pageItems, Int32 pageSize, Func`2 action)
   at SqlSugar.FastestProvider`1.BulkMergeAsync(List`1 datas, String[] whereColumns, String[] updateColumns)
DotNetNext commented 9 months ago

这个功能在.net framework中不支持

DotNetNext commented 9 months ago

Fastest API在 Oracle 中只有 .net core能用

DotNetNext commented 9 months ago

用 .NET CORE需要提供完整用例,实体和代码

Yumitoya8569 commented 9 months ago

SqlSugar 5.1.4.110 Oracle 11c .Net (Core) 7

由於是生產環境的代碼, 我這邊只能提供近似的結構, 未實際測試

public class TableA
{
    [SugarColumn(IsPrimaryKey = true)]
    public string key1 { get; set; } = string.Empty;
    [SugarColumn(IsPrimaryKey = true)]
    public string key2 { get; set; } = string.Empty;
    [SugarColumn(IsPrimaryKey = true)]
    public string key3 { get; set; } = string.Empty;
    public string? str1 { get; set; }
    public string? str2 { get; set; }
    public DateTime? date1 { get; set; }
    public DateTime? date2 { get; set; }
    public decimal? num1 { get; set; }
    public decimal? num2 { get; set; }
}

await _db.Fastest<TableA>().PageSize(1000000).BulkMergeAsync(entities);
DotNetNext commented 9 months ago

SqlSugarCore 5.1.4.111-preview22

预览版本已修复

DotNetNext commented 9 months ago

还有问题发新的isssue