使用OnDiffLogEvent问题 返回

SqlSugar
14 197
该叫什么 阿泰 发布于2021/11/9
悬赏:5 飞吻

正常更新操作没有问题,在.ExecuteCommand()之前加上.EnableDiffLogEvent()就不行,报错:ORA-00911:无效字符串

按照文档配置的:https://www.donet5.com/home/doc?masterId=1&typeId=1204 【差异日志】

热忱回答14

  • 阿泰 阿泰 VIP0
    2021/11/9

    用的单例模式SugarScope,其他和文档中配置一抹一样

    0 回复
  • fate sta fate sta VIP0
    2021/11/9

    @阿泰:这个需要提供能重现的用例了 ,官网上的用例是可以跑的 

    0 回复
  • fate sta fate sta VIP0
    2021/11/9

    image.png

    0 回复
  • fate sta fate sta VIP0
    2021/11/9

    源码的 这个里面有是可以跑的

    0 回复
  • 阿泰 阿泰 VIP0
    2021/11/10

    @fate sta

    配置如下,不过不是用的SqlSugarClient ,而是用的SugarScope


    am8_20211110083347751.jpg

    更新时报错

    am8_20211110083341119.jpg


    0 回复
  • 阿泰 阿泰 VIP0
    2021/11/10

    @fate sta:麻烦帮忙看看,是我SugarScope配置不对吗?

    0 回复
  • fate sta fate sta VIP0
    2021/11/10

    按这个模版写个可以重现的例子 https://www.donet5.com/Home/Doc?typeId=2366

    0 回复
  • 阿泰 阿泰 VIP0
    2021/11/10
    using System;
    using System.Collections.Generic;
    using SqlSugar;
    namespace OrmTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                var db = new SqlSugarScope(new SqlSugar.ConnectionConfig()
                {
                    ConnectionString = "Data Source=XX;User ID=XX;Password=XX",
                    DbType = DbType.Oracle,
                    IsAutoCloseConnection = true,
                    AopEvents = new AopEvents()
                    {
                        OnDiffLogEvent = it =>
                        {
                            Console.WriteLine("======OnDiffLogEvent=======");
                            var beforeData = it.BeforeData;//操作前记录,包含:字段描述,列名,值,表名,表描述
                            var AfterData = it.AfterData;
                            var Sql = it.Sql;
                            var BusinessData = it.BusinessData;//传进来的对象
                            var Parameters = it.Parameters;
                            var DiffType = it.DiffType;//insert update delete
                            var Time = it.Time;
                        }
                    }
                });
    
                //建表 
                if (!db.DbMaintenance.IsAnyTable("A_Test", false))
                {
                    db.CodeFirst.InitTables<A_Test>();
                }
    
                //用例代码 
    
                A_Test test = new A_Test()
                {
                    id = 1,
                    name = "101"
                };
                //新增时,DiffLog执行正常
                db.Insertable<A_Test>(test)
                    .EnableDiffLogEvent(new { title = "Test AsInsertable" })
                    .ExecuteCommand();
    
                //修改时,DiffLog执行正常
                test.name = "102";
                db.Updateable<A_Test>(test)
                    .EnableDiffLogEvent(new { title = "Test AsInsertable" })
                    .ExecuteCommand();
    
    
                //新增或修改
                List<A_Test> list = new List<A_Test>();
                test.name = "103";
                A_Test test2 = new A_Test()
                {
                    id = 2,
                    name = "201"
                };
                list.Add(test);
                list.Add(test2);
                var s = db.Storageable(list).ToStorage();
    
                //新增或修改 -- 新增时,DiffLog执行正常
                s.AsInsertable
                    .EnableDiffLogEvent(new { title = "Test AsInsertable" }).
                    ExecuteCommand();
    
                //新增或修改 -- 修改时,DiffLog执行异常:Oracle.ManagedDataAccess.Client.OracleException:“ORA-00911: 无效字符
                s.AsUpdateable
                    .EnableDiffLogEvent(new { title = "Test AsUpdateable" })
                    .ExecuteCommand();
    
                //用例代码
                Console.WriteLine("用例跑完");
            }
    
            //建类
            public class A_Test
            {
                [SugarColumn(IsPrimaryKey = true)]
                public long id { get; set; }
                public string name { get; set; }
            }
    
        }
    }

    示例代码入上,在db.Storageable(list).ToStorage();后,再执行s.AsUpdateable时,增加.EnableDiffLogEvent报错无效字符。


    新增或修改 -- 修改时,DiffLog执行异常:Oracle.ManagedDataAccess.Client.OracleException:“ORA-00911: 无效字符


    0 回复
  • 阿泰 阿泰 VIP0
    2021/11/10

    @fate sta: 示例代码如上,sqlsugar 5.0.4,单例SugarScope

    0 回复
  • fate sta fate sta VIP0
    2021/11/10

    @阿泰:关注 5.0.4.4版本 后续会大力兼容差异日志

    0 回复
  • fate sta fate sta VIP0
    2021/11/10

    @阿泰:你可以先这样实现,差异日志不可以批量方式处理

            var s = db.Storageable(list).ToStorage();
    
                //新增或修改 -- 新增时,DiffLog执行正常
                s.AsInsertable
                    .EnableDiffLogEvent(new { title = "Test AsInsertable" }).
                    ExecuteCommand();
    
                //新增或修改 -- 修改时,DiffLog执行异常:Oracle.ManagedDataAccess.Client.OracleException:“ORA-00911: 无效字符
                db.Updateable<A_Test>(s.UpdateList.Select(it=>it.Item).FirstOrDefault())
                    .EnableDiffLogEvent(new { title = "Test AsUpdateable" })
                    .ExecuteCommand();


    0 回复
  • 阿泰 阿泰 VIP0
    2021/11/10

    @fate sta:好的,谢谢

    0 回复
  • fate sta fate sta VIP0
    2021/11/15

    @阿泰:5.0.4.3 preview06版本已经支持了批量操作 可以试用

    0 回复
  • fate sta fate sta VIP0
    2021/11/15

    高级保存应该也可以用上了

    0 回复