Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error in BulkSynchronizeAsync #592

Open
Joebu opened this issue Jun 21, 2024 · 1 comment
Open

Error in BulkSynchronizeAsync #592

Joebu opened this issue Jun 21, 2024 · 1 comment
Assignees

Comments

@Joebu
Copy link

Joebu commented Jun 21, 2024

Description

When using BulkSynchronizeAsync , I encounter an error when attempting to synchronize entities that include a computed column . The computed column is added correctly to the database and mapped in the EF Core model, but the bulk operation fails to handle it correctly.

ModelConfiguration
modelBuilder.Entity<Product>() .Property(x => x.CodePrefix) .HasComputedColumnSql("SUBSTR([Code], 1, 11)", stored: true);

Generated Column
"CodePrefix" GENERATED ALWAYS AS (SUBSTR("Code", 1, 11)) STORED,

My Bulk Operations
IgnoreOnSynchronizeInsertExpression = ignore => ignore.CodePrefix, IgnoreOnInsertExpression = ignore => ignore.CodePrefix, IgnoreOnSynchronizeUpdateExpression = ignore => ignore.CodePrefix,

Exception

An error occured while resolving mapping by name. See the inner exception for details
Missing Column : CodePrefix
On entity : Product
On Table : "Products"
at Z.BulkOperations.BulkOperation.()
at Z.BulkOperations.BulkOperation.Execute()
at Z.BulkOperations.BulkOperation.BulkSynchronize()
at .BulkSynchronize[T](DbContext this, IEntityType entityType, IEnumerable1 list, Action1 options, Boolean forceSpecificTypeMapping)
at .BulkSynchronize[T](DbContext this, IEnumerable1 entities, Action1 options)
at DbContextExtensions.BulkSynchronize[T](DbContext this, IEnumerable1 entities, Action1 options)
at DbContextExtensions.1.() at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread) --- End of stack trace from previous location --- at .1.MoveNext()

Further technical details

  • EF version: [EF Core v8.0.5]
  • EF Extensions version: [EFE Core 8.102.2.5]
  • Database Server version: [SQLITE]
  • Database Provider version (NuGet): [Microsoft.Data.Sqlite.Core v8.0.5]
@JonathanMagnan JonathanMagnan self-assigned this Jun 21, 2024
@JonathanMagnan
Copy link
Member

Hello @Joebu ,

Thank you for reporting.

We will look at this.

My developer told me that, meanwhile, instead of ignoring this property, you should instead use the ColumnInputExpression to map all your properties and it should works:

 option option.ColumnInputExpression = x => new { x.ColumnInt, x.Code }

Obviously, this is not the ideal solution, but at least you will be able to make it work while we can see how we can fix this issue with computed column for SQLite.

Best Regards,

Jon

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants