AOP拦截问题 返回

SqlSugar 沟通中
1 236

我是想自动设置实体的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