分表查询时,查询过滤器条件为什么会出现多次? 返回

SqlSugar 处理完成
13 179
该叫什么 xp 发布于2周前
悬赏:0 飞吻

image.png

热忱回答13

  • xp xp VIP0
    2周前

    image.png

    0 回复
  • 过滤器扔地方不对,按文档去扔,你肯定扔进仓储了

    0 回复
  • xp xp VIP0
    2周前

    @fate sta

    class Program

        {

            static void Main(string[] args)

            {

                var db = new SqlSugarClient(new ConnectionConfig()

                {

                    ConnectionString = "host=127.0.0.1;Port=3306;Database=test;uid=root;pwd=root;Charset=utf8mb4;Allow User Variables=true",

                    DbType = DbType.MySql,

                    IsAutoCloseConnection = true,

                    InitKeyType = InitKeyType.Attribute

                }, db => {


                    //过滤器写在这儿就行了


                    #region 添加查询过滤器

                    db.QueryFilter.AddTableFilter<IDeletedFilter>(x => x.IsDeleted == 0);

                    db.QueryFilter.AddTableFilter<IOrgFilter>(x => x.OrgId == 10);

                    #endregion

                });


                #region SQL执行前

                db.Aop.OnLogExecuting = (sql, pars) =>//SQL执行前

                {

                    var sqlString = UtilMethods.GetSqlString(DbType.MySql, sql, pars);

                    Console.WriteLine(sqlString);

                };

                #endregion


                //#region 添加查询过滤器

                //db.QueryFilter.AddTableFilter<IDeletedFilter>(x => x.IsDeleted == 0);

                //db.QueryFilter.AddTableFilter<IOrgFilter>(x => x.OrgId == 10);

                //#endregion


                //用例代码

                var testSplit001 = new TestSplit001()

                {

                    Id = DateTime.Now.Ticks,

                    Name = "insert-" + DateTime.Now.Ticks,

                    CreateTime = DateTime.Now,

                    IsDeleted = 0,

                    OrgId = 10,

                };


                {

                    Console.WriteLine("-----------------------------------插入数据-------------------------------------");

                    var result = db.Insertable(testSplit001).SplitTable().ExecuteCommand();//用例代码

                }


                //testSplit001.IsDeleted = 1;

                //testSplit001.Name = "delete";


                //{

                //    Console.WriteLine("-----------------------------------同步更新数据(只更新IsDeleted)-------------------------------------");

                //    //同步没问题--只更新IsDeleted字段

                //    var result2 = db.Updateable(testSplit001).UpdateColumns(it => it.IsDeleted).SplitTable().ExecuteCommand();//用例代码

                //}


                //{

                //    Console.WriteLine("-----------------------------------异步更新数据(只更新IsDeleted)-------------------------------------");

                //    //异步有问题--IsDeleted、Field1都更新了

                //    db.Updateable(testSplit001).UpdateColumns(it => it.IsDeleted).SplitTable().ExecuteCommandAsync();

                //}


                {

                    Console.WriteLine("-----------------------------------查询-------------------------------------");

                    var list = db.Queryable<TestSplit001>().SplitTable().ToList();

                }


                Console.WriteLine("用例跑完");

                Console.ReadKey();

            }

        }


        /// <summary>

        /// 

        /// </summary>

        [SplitTable(SplitType.Month)]//按月分表 (自带分表支持 年、季、月、周、日)

        [SugarTable("test001_{year}{month}{day}", IsCreateTableFiledSort = true)]//3个变量必须要有,这么设计为了兼容开始按年,后面改成按月、按日

        [SugarIndex("index_createtime_", nameof(CreateTime), OrderByType.Asc)]

        public partial class TestSplit001 : IDeletedFilter, IOrgFilter

        {

            /// <summary>

            /// 

            /// </summary>

            public TestSplit001()

            {


            }


            /// <summary>

            /// 主键

            /// </summary>

            [SugarColumn(IsPrimaryKey = true)]

            public long Id { get; set; }


            /// <summary>

            /// 

            /// </summary>

            public string Name { get; set; }


            /// <summary>

            /// 创建时间

            /// </summary>

            [SplitField]

            public DateTime CreateTime { get; set; }


            /// <summary>

            /// 

            /// </summary>

            public byte IsDeleted { get; set; }


            /// <summary>

            /// 

            /// </summary>

            public long OrgId { get; set; }

        }


        /// <summary>

        /// 接口过滤器(删除标志)

        /// </summary>

        public interface IDeletedFilter

        {

            /// <summary>

            /// 删除标志

            /// </summary>

            public byte IsDeleted { get; set; }

        }


        /// <summary>

        /// 接口过滤器(机构标志)

        /// </summary>

        public interface IOrgFilter

        {

            /// <summary>

            /// 机构标志

            /// </summary>

            public long OrgId { get; set; }

        }


    0 回复
  • xp xp VIP0
    2周前

    @fate sta:是放到这里吗?

    image.png

    0 回复
  • xp xp VIP0
    2周前

    @fate staimage.png

    0 回复
  • xp xp VIP0
    1周前

    @fate sta:放的位置 是有问题吗?

    0 回复
  •  image.png

    这样放是对的

    0 回复
  • @fate sta:可以重现你的问题,好像分表会出一个重复的条件

    0 回复
  • xp xp VIP0
    1周前

    @fate sta

    image.png

    这两个位置 有什么区别吗?

    0 回复
  • @xp:目前和位置没有关系,确实有BUG

    0 回复
  • 建议写到推荐位置

    0 回复
  • SqlSugarCore 5.1.4.155-preview11

     过五分钟后,勾一下预览,已修复

    0 回复
  • xp xp VIP0
    1周前

    @fate sta:可以了,谢谢

    0 回复