【问题标题】:ExecuteUpdateAsync in EF Core 7.0: set property based on Logic throws InvalidOperation ExceptionEF Core 7.0 中的 ExecuteUpdateAsync:基于逻辑设置属性抛出 InvalidOperation 异常
【发布时间】:2023-01-24 00:34:45
【问题描述】:

我正在处理包含超过 100.000 条记录的数据密集型表。我需要检索列并通过扩展方法中实现的逻辑更新它。

例如:

var updateResult = await _context.WebidPersons.ExecuteUpdateAsync(x => x.SetProperty(a => a.EmployeeInfo, x => x.EmployeeInfo.ReturnAsEncrypted());

扩展方法就是这样

public static string ReturnAsEncrypted(this string value)
{
  // logic that encrypt the EmployeeInfo
}

输出异常

无法翻译 System.InvalidOperationException 表达式。附加信息:“SetProperty”的以下 lambda 参数不代表要设置的有效属性:“x => x.EmployeeInfo.ReturnAsEncrypted”。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。 源=Microsoft.EntityFrameworkCore.Relational

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

    ExecuteUpdateAsync 在服务器端执行所有工作(即它被翻译成类似 UPDATE [t] SET [t].[EmployeeInfo] = ... FROM [Table] AS [t] 的东西),因此 EF Core 需要将 x.EmployeeInfo.ReturnAsEncrypted() 翻译成有效的 SQL。 ReturnAsEncrypted 似乎是一些默认不翻译的自定义函数。一种方法是查看 mapping a method to a SQL function 是否可以将 ReturnAsEncrypted 转换为 SQL。否则,您将需要使用标准 EF Core 方法在客户端获取数据并进行更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      相关资源
      最近更新 更多