AOP拦截问题 返回
SqlSugar
沟通中
1
236
老菜鸟了 发布于2025/11/18
悬赏:0 飞吻
我是想自动设置实体的ModifiedBy字段,代码如下:
db.Aop.DataExecuting = (oldValue, entityInfo) =>
{
var loginid = Convert.ToInt64(httpContextAccessor?.HttpContext?.Items["login_id"] ?? 0);
if (entityInfo.PropertyName == "CreatedBy" && entityInfo.OperationType == DataFilterType.InsertByObject)
{
Console.WriteLine($"aop修改值{entityInfo.PropertyName}={loginid}");
entityInfo.SetValue(loginid);
}
if (entityInfo.PropertyName == "ModifiedBy")
{
Console.WriteLine($"aop修改值{entityInfo.PropertyName}={loginid}");
entityInfo.SetValue(loginid);
}
};await sugarSql.Updateable<mysql_test>().SetColumns(i => new mysql_test { remark = "123", ModifiedBy = 0 }, true).Where(i => 1 == 1).ExecuteCommandAsync();[SugarTable("test")]
public class mysql_test
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public long id { get; set; }
[SugarColumn(SqlParameterDbType = typeof(PasswordPropertyConvert))]
public string remark { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(InsertServerTime = true, IsOnlyIgnoreUpdate = true)]
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人
/// </summary>
[SugarColumn(IsOnlyIgnoreUpdate = true)]
public long CreatedBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(InsertServerTime = true, UpdateServerTime = true)]
public DateTime ModifyTime { get; set; }
/// <summary>
/// 修改人Id
/// </summary>
//[SugarColumn(IsOnlyIgnoreUpdate = true)]
public long ModifiedBy { get; set; }
}但是发现2个很奇怪的问题
第一个问题是
if (entityInfo.PropertyName == "ModifiedBy")
会进入两次
Now listening on: http://localhost:5216 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: E:\VSProjects\SqlSugarTest warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3] Failed to determine the https port for redirect. aop修改值ModifiedBy=0 aop修改值ModifiedBy=0 ----------------------MySql-------------------------- sql:UPDATE `test` SET `remark` = @myp100 ,`ModifyTime`=NOW(6), `ModifiedBy` = @Const1 WHERE ( 1 = 1 ) params: @myp100:d70cd6fd5765507cec5d4f5c4e02d4b5 @Const1:0 @id:0 ------------------------------------------------
第二个问题是看了论坛 回复 https://www.donet5.com/Ask/9/25135 将 ModifiedBy 设置为 IsOnlyIgnoreUpdate后
实际不会修改ModifiedBy
info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5216 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: E:\VSProjects\SqlSugarTest warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3] Failed to determine the https port for redirect. aop修改值ModifiedBy=0 aop修改值ModifiedBy=0 ----------------------MySql-------------------------- sql:UPDATE `test` SET `remark` = @myp100 ,`ModifyTime`=NOW(6) WHERE ( 1 = 1 ) params: @myp100:d70cd6fd5765507cec5d4f5c4e02d4b5 @Const1:0 @id:0 ------------------------------------------------
热忱回答(1)
-
fate sta VIP0
2025/11/18几种更新用过滤器的写法
0 回复