我正在运行下面的代码,但在运行时出现
YogabandyFee
异常。
var payoutResult = await _dbContext.StripePayouts
.Where(p => p.StripePayoutId == stripePayoutId)
.Select(p => new { p.GrossAmount, p.TotalTokens, p.NetAmount, p.ReconciledTransfers, p.EditedDate, p.YogabandyFee })
.ExecuteUpdateAsync(setters => setters
.SetProperty(p => p.GrossAmount, grossAmount)
.SetProperty(p => p.TotalTokens, totalTokens)
.SetProperty(p => p.YogabandyFee, p => new YogabandyFee { TotalFee = (grossAmount - p.NetAmount - platformFee) } )
.SetProperty(p => p.ReconciledTransfers, true)
.SetProperty(p => p.EditedDate, DateTime.UtcNow)
);
这可以做到吗? 我可以在此类更新中创建新条目吗?
这是错误:
System.InvalidOperationException:LINQ表达式'DbSet().Where(s => s.StripePayoutId == __stripePayoutId_0).LeftJoin(内部:DbSet(),outerKeySelector:s => EF.Property(s,“Id”), innerKeySelector: y => EF.Property(y, "StripePayoutId"), resultSelector: (o, i) => 新透明标识符( Outer = o, Inner = i )) .Select(s => new { GrossAmount = s.Outer .GrossAmount、TotalTokens = s.Outer.TotalTokens、NetAmount = s.Outer.NetAmount、ReconciledTransfers = s.Outer.ReconciledTransfers、EditedDate = s.Outer.EditedDate、YogabandyFee = s.Inner }) .ExecuteUpdate(setters => setters. SetProperty( propertyExpression: p => p.GrossAmount, valueExpression: __grossAmount_1).SetProperty( propertyExpression: p => p.TotalTokens, valueExpression: __totalTokens_2).SetProperty( propertyExpression: p => p.ReconciledTransfers, valueExpression: True).SetProperty( propertyExpression: p => p.EditedDate, valueExpression: DateTime.UtcNow).SetProperty( propertyExpression: p => p.YogabandyFee, valueExpression: p => new YogabandyFee{ TotalFee = __grossAmount_1 - p.NetAmount - __platformFee_3 } ))' 无法被翻译。附加信息:“SetProperty”的以下 lambda 参数不代表要设置的有效属性:“p => p.YogabandyFee”。请参阅 https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatedExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatedExpressionVisitor.Translate(表达式表达式) 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatedExpressionVisitor.Translate(表达式表达式) 在 Microsoft.EntityFrameworkCore.Query.QueryCompilationContext .CreateQueryExecutor[TResult](表达式查询)位于 Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](表达式查询,布尔异步)位于 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase 数据库,表达式查询) 、 IModel 模型、布尔异步)位于 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0
1 编译器)位于 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](表达式查询、CancellationToken CancellationToken) Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](表达式表达式,CancellationTokencancellationToken)在Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.ExecuteUpdateAsync[TSource](IQueryable1.b__0() at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func
1 setPropertyCalls,CancellationTokencancellationToken)在Functions.ReconcileTransfers.Run(字符串 myQueueItem) 在 /Users/charles/yogabandy2020/Functions/ReconcileTransfers.cs:第 119 行1 source, Expression
抛出 System.InvalidOperationException 异常,因为 EF 中的 ExecuteUpdateAsync 方法不支持直接在更新操作中创建或分配新实体。因此,您可以做的是首先更新主要实体,然后更新“YogabandyFee”。