sugar aop 加密解密 增删改正常 查询不出 返回

SqlSugar 沟通中
10 279
该叫什么 Wiiii 发布于1个月前
悬赏:0 飞吻

数据库有张表UserInfo   现在需要对手机号加密   及数据库保存的手机号为加密字段      程序查询取出的为解密字段 

image.png

热忱回答10

  • fate sta fate sta VIP0
    1个月前

    肯定会走的

    0 回复
  • fate sta fate sta VIP0
    1个月前
    0 回复
  • Wiiii Wiiii VIP0
    1个月前

    @fate sta:  大佬这里

    using SqlSugar;

    using SqlSugar.DbConvert;

    using System;

    using System.Collections.Generic;

    using System.Data;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;


    namespace ConsoleApp1

    {

        class Program

        {

            static void Main(string[] args)

            {

                var DB = new SqlSugarScope(new SqlSugar.ConnectionConfig()

                {

                    ConnectionString = "Column Encryption Setting = Enabled;server=192.168.0.77;uid=sa;pwd=123;database=TestJiaMiDB;",

                    DbType = SqlSugar.DbType.SqlServer,

                    IsAutoCloseConnection = true

                }, db => {

                    db.Aop.DataExecuting = (oldValue, entityInfo) =>

                    {

                        if (!entityInfo.IsAnyAttribute<JiaMiAttribute>())

                            return;

                        if ((entityInfo.OperationType == DataFilterType.InsertByObject ||

                        entityInfo.OperationType == DataFilterType.UpdateByObject || 

                        entityInfo.OperationType==DataFilterType.DeleteByObject))

                        {

                            entityInfo.SetValue(AesEncryption.Encrypt(Convert.ToString(oldValue)));

                        }

                    };

                    db.Aop.DataExecuted = (value, entity) =>

                    {

                        if(!entity.Entity.Columns.Any(p=>p.PropertyInfo.CustomAttributes.Any(s=>s.AttributeType==typeof(JiaMiAttribute))))

                            return;

                        foreach(var item in entity.Entity.Columns)

                        {

                            if(item.PropertyInfo.CustomAttributes.Any(s => s.AttributeType == typeof(JiaMiAttribute)))

                            {

                                var newValue = AesEncryption.Decrypt(Convert.ToString(entity.GetValue(item.PropertyName)));

                                entity.SetValue(item.PropertyName, newValue);

                            }

                        }

                    };


                });



                UserInfo userInfo = new UserInfo();

                userInfo.ID = Guid.NewGuid().ToString();

                userInfo.Name = "Test";

                userInfo.Phone = "1234";

                DB.GetSimpleClient<UserInfo>().Insert(userInfo); //插入数据是对的 数据库中为加密的数据


               //下面这个不会进db.Aop.DataExecuted的断点   用CopyNew也不会走断点

                var userInfoByPhone = DB.GetSimpleClient<UserInfo>().GetFirst(p => p.Phone == "1234");

                Console.ReadLine();

            }

        }


        [SugarTable("JiaMiUserInfo")]

        public class UserInfo

        {

            public UserInfo()

            {

            }

            [SugarColumn(IsPrimaryKey = true)]

            public string ID { get; set; }

            public string Name { get; set; }

            [JiaMi]

            public string Phone { get; set; }

        }


        /// <summary>

        /// 设置类得自定义属性  

        /// </summary>

        public class JiaMiAttribute : Attribute

        {

        }

    }



    0 回复
  • fate sta fate sta VIP0
    1个月前

    -

    0 回复
  • fate sta fate sta VIP0
    1个月前

    image.png

    可以进来,你测试了吗

    0 回复
  • Wiiii Wiiii VIP0
    1个月前

    GIF 2025-2-13 15-16-43.gif

    @fate sta:这就神奇了,大佬你看我的查询都不会进DataExecuted,是不是版本的问题

    0 回复
  • Wiiii Wiiii VIP0
    1个月前

    现在用的5.1.4.175

    0 回复
  • fate sta fate sta VIP0
    1个月前

    https://www.donet5.com/Home/Doc?typeId=2366


    按提问模版写个DEMO  , 删掉OBJ和BIN打包上传

    0 回复
  • Wiiii Wiiii VIP0
    1个月前

    ConsoleApp1.rar


    @fate sta:大佬这里

    0 回复
  • Wiiii Wiiii VIP0
    1个月前

    @fate sta:你好,代码发了,帮忙看看是哪里有问题呢

    0 回复