zzzprojects/EntityFramework-Extensions
Entity Framework Bulk Operations | Improve Entity Framework performance with Bulk SaveChanges, Insert, update, delete and merge for SQL Server, SQL Azure, SQL Compact, MySQL and SQLite.
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: New [InformationSchemaManager.CloneCacheModel](https://entityframework-extensions.net/model-caching#clonecachemodel) method that allows cloning a model from one schema/entity to another. (Documentation coming soon.)
- FIXED: For `SQLite`, `Int64` values are now automatically converted to `bool` when required, fixing a casting exception with `AutoMapOutputDirection = true`
- FIXED: For `SQLite`, schema names are now automatically ignored since this concept does not exist in this database provider
- FIXED: Issue when using `InsertIfNotExists = true` with a custom [primary key](https://entityframework-extensions.net/primary-key) containing a column mapped as `output`.
- IMPROVED: For `PostgreSQL`, the binary import startup process has been optimized for additional performance gains
- IMPROVED: `SQL Server` comments used when retrieving table information now use single-line comments (`-- my comment`) instead of multi-line comments (`/* my comment */`).
- IMPROVED: Self-hierarchy resolution when a custom [primary key](https://entityframework-extensions.net/primary-key) is used
- UPDATED: Monthly Trial Release
- + 2 more
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: Support to [Microting.EntityFrameworkCore.MySql](https://www.nuget.org/packages/Microting.EntityFrameworkCore.MySql/) (See also [#2007](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/2007), [#2202](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/2022)). Use `AllowLoadLocalInfile=true` to allow `BulkCopy`
- ADDED: Support to `One-to-Many` [complex type](https://www.learnentityframeworkcore.com/model/complex-type)
- IMPROVED: Error message for scenario not supported by the `UsePostgreOnMergeSqlInsertOnConflictDoUpdate` options
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of June
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: New method [CacheModel](https://entityframework-extensions.net/model-caching#cachemodel) that allows retrieving all information related to an `EntityType` (database and model information) and caching it.
- FIXED: Issue with `BulkSaveChanges` when specifying a [TemporaryTableName](https://entityframework-extensions.net/temporary-table#temporarytablename) that could be re-used across multiple operations in the same batch.
- IMPROVED: For `MySQL`, `GET_LOCK` and `RELEASE_LOCK` are now used when there is a transaction (`LOCK TABLE` is still used when there is no transaction).
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of May
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: `UseStream` and `StreamSize` (default: 100,000) options. When streaming is enabled, multiple bulk operations are performed according to the `StreamSize`. For example, if you have 500k rows, 5 bulk operations of `100,000` rows will be executed to reduce memory usage. Compatible with [BulkInsert](https://entityframework-extensions.net/bulk-insert), [BulkInsertOptimized](https://entityframework-extensions.net/bulk-insert-optimized), [BulkUpdate](https://entityframework-extensions.net/bulk-update), [BulkDelete](https://entityframework-extensions.net/bulk-delete), and [BulkMerge](https://entityframework-extensions.net/bulk-merge) (Specific to EF Core).
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of April
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- IMPROVED: Option [TemporaryTableUseSameName](https://entityframework-extensions.net/temporary-table#temporarytableusesamename) now automatically includes the "action" in the generated table name
- IMPROVED: Option [TemporaryTableName](https://entityframework-extensions.net/temporary-table#temporarytablename) now allows you to specify a string "`{ZZZ_action}`" if you want the "action" to be part of the table name
- IMPROVED: A fix was made in [v10.105.2.0](https://github.com/zzzprojects/EntityFramework-Extensions/releases/tag/10.105.2.0)) to check whether a CancellationToken is requested after every row ([https://github.com/zzzprojects/EntityFramework-Extensions/issues/636](https://github.com/zzzprojects/EntityFramework-Extensions/issues/636)).
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of March
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- IMPROVED: Optimization for the `PostgreSQL` provider (10% faster when inserting)
- ADDED: Support to [EF Profiler](https://hibernatingrhinos.com/products/efprof) for [Microsoft.Data.SqlClient](https://www.nuget.org/packages/microsoft.data.sqlclient) (Specific to `EF6`)
- FIXED: Issue with `PreBatchSaveChanges` and `PostBatchSaveChanges` that was called twice.
- FIXED: Issue where JSON column names were ignored in the mapping.
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of February
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- IMPROVED: CancellationToken handling when a bulk copy strategy is used (https://github.com/zzzprojects/EntityFramework-Extensions/issues/636)
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of January
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- FIXED: Issue with EFE v9.x that required using a `ConfigurationManager` version lower than `10.0.0`. It can now be used with any version higher than `9.0.0`.
- Trial unlocked until the end of December
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- EFCORE-VERSION CHANGES: With EF Core 10 released, the `[efcore-version]` in the `[efcore-version].[major].[minor].[patch]` [versioning conventions](https://entityframework-extensions.net/efcore-pinned-versioning) will now be incremented from `9.x.y.z` to `10.x.y.z`.
- ADDED: Support to EF Core 10
- BREAKING CHANGES: [MySqlBulkCopy](https://mysqlconnector.net/api/mysqlconnector/mysqlbulkcopytype/) is now used by our library when `AllowLoadLocalInfile=True` is set in the connection string (specific to providers using MySqlConnector such as [Pomelo.EntityFrameworkCore.MySql](https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql)).
- BREAKING CHANGES: [BulkMerge](https://entityframework-extensions.net/bulk-merge) now uses `INSERT DEFAULT VALUES` when no column to insert is specified (specific to SQL Server). You can ignore the insert part by setting `IgnoreOnMergeInsert = true`.
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of December
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- FIXED: Options `UsePostgreSqlInsertOnConflictDoNothing`, `UsePostgreSqlInsertOnConflictDoUpdate`, and `UsePostgreSqlOnMergeInsertOnConflictDoUpdate` can now be used when the key is an identity (specific to PostgreSQL).
- RENAMED: New options added in the previous version to better align with those that may contain SQL text (specific to Oracle):
- OracleInsertTableHint to OracleInsertTableHintSql
- OracleSelectInsertIfNotExistsTableHint to OracleSelectInsertIfNotExistsTableHintSql
- OracleUpdateTableHint to OracleUpdateTableHintSql
- OracleDeleteTableHint to OracleDeleteTableHintSql
- OracleMergeInsertTableHint to OracleMergeInsertTableHintSql
- OracleMergeUpdateTableHint to OracleMergeUpdateTableHintSql
- + 3 more
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- BREAKING CHANGES: [BulkSaveChanges](https://entityframework-extensions.net/bulk-savechanges) will now create a savepoint when a transaction is already open, like `SaveChanges` does (Issue #627)
- BREAKING CHANGES: The following features [WhereBulkContains](https://entityframework-extensions.net/where-bulk-contains), [WhereBulkNotContains](https://entityframework-extensions.net/where-bulk-not-contains), and [BulkRead](https://entityframework-extensions.net/bulk-read) now use fixed names instead of a generic `guid` name to allow re-using cached query plans.
- ADDED: A new option to disable this behavior: `WhereBulkManager.DisableFixedTemporaryTableName = true`
- ADDED: Support to EF Core 10 RC1
- ADDED: New option [TemporaryTableCreateAndDrop](https://entityframework-extensions.net/temporary-table#temporarytablecreateanddrop) that will create and drop a table when a `TemporaryTableName` is specified.
- ADDED: New option [ResolvedTemporaryTableName](https://entityframework-extensions.net/temporary-table#resolvedtemporarytablename) that will return the temporary table name used.
- ADDED: New option `UsePostgreOnMergeSqlInsertOnConflictDoUpdate` (specific to PostgreSQL)
- ADDED: New options (specific to Oracle):
- + 10 more
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of September
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of August
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: Support for the new [JSON](https://learn.microsoft.com/en-us/sql/t-sql/data-types/json-data-type?view=azuresqldb-current) data type (Specific for SQL Server)
- Trial unlocked until the end of July
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: Support to SynchronizeSoftDeleteFormula to MySQL provider
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of July
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: Support for an additional case when `GetHashCode` is overridden and the `DictionaryEqualityComparer` option is used through [IncludeGraph](https://entityframework-extensions.net/include-graph).
- ADDED: Support to `SynchronizeSoftDeleteFormula` to SQLite provider
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of June
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- UPDATED: Monthly Trial Release
- ADDED: Support to [Devart.Data.MySql.EFCore](https://www.nuget.org/packages/devart.data.mysql.efcore/)
- Trial unlocked until the end of May
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of April
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: New [ExplicitValueResolutionMode](https://entityframework-extensions.net/explicit-value-resolution-mode#explicitvalueresolutionmode): `SmartDefaultValueOnBulkMergeInsert` and `SmartPartialResolutionOnBulkMergeInsert`
- FIXED: Issue with `InMemory` when EFE is trying to retrieve the relational table (Specific for 9.x version)
- IMPROVED: How we handle concurrency checks for bulk operations (Specific for MySQL)
- IMPROVED: How we handle primary keys that are found automatically that are required to be outputted for some rare scenario (Specific for MySQL)
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of March
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: A new option `BulkOperationBuilder` in the `WhereBulkManager`. The builder will be used when data is inserted into a temporary table, allowing some custom options. This option is for the [WhereBulkContains](https://entityframework-extensions.net/where-bulk-contains) and similar methods.
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of February
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- BREAKING CHANGES: If there is no column to update during a BulkMerge, values will no longer be outputted unless the option `ForceOutputFromUnmodifiedRow = true` is used #614 (Specific for MySQL)
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of January
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- FIXED: Issue with [WhereBulkContains](https://entityframework-extensions.net/where-bulk-contains) when specifying the table name (Specific to PostgreSQL)
- ADDED: Support to [Column Collation](https://learn.microsoft.com/en-us/ef/core/miscellaneous/collations-and-case-sensitivity#column-collation) if none has been found in the database (Specific to SQL Server)
- ADDED: New option `DisablePostgreSqlSpecializedCastForIdentity` that disables the cast we perform for the identity. This option is sometimes required with the type is a `SERIAL` that we try to cast as a `BIGINT` (Specific to PostgreSQL)
- ADDED: Multiple improvements for `MySQL`:
- Support for some subquery with the [UpdateFromQuery](https://entityframework-extensions.net/update-from-query) feature
- Support to `DisableDotCheckForEscapeTableName` option
- Support to `Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlGeometryTypeMapping`
- Support to Audit, ResultInfo, and Logging when deleting during the [BulkSynchronize](https://entityframework-extensions.net/bulk-synchronize)
- + 2 more
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- EFCORE-VERSION CHANGES: With EF Core 9 released, the `[efcore-version]` in the `[efcore-version].[major].[minor].[patch]` [versioning conventions](https://entityframework-extensions.net/efcore-pinned-versioning) will now be incremented from `8.x.y.z` to `9.x.y.z`.
- Trial unlocked until the end of December
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: Support to key that use a `NUMERIC` type (Specific to PostgreSQL)
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of December
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- UPDATED: Monthly Trial Release for EF6
- Trial unlocked until the end of November
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: 2 news methods `WhereExistsBulkInsert` and `WhereNotExistsBulkInsert`. More documentation is coming in November. Meanwhile, you can reference this [comment](https://github.com/zzzprojects/EntityFramework-Extensions/issues/578#issuecomment-2430542358)
- ADDED: Support to EF Core 9 RC2
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of November
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: Post "event" such as `PostBulkSaveChanges`, `PostBulkInsert`, etc.
- ADDED: Support to `AutoTruncate` feature to more provider (Specific to PostgreSQL)
- ADDED: New global option `WhereBulkManager.ReplaceFirstTableNameOccurenceOnly` that allow to replace only the first occurrence of the table for options such as [WhereBulkContains](https://entityframework-extensions.net/where-bulk-contains) (and other similar methods)
- FIXED: Issue when the generated alias had more than 63 characters (Specific to PostgreSQL)
- Trial unlocked until the end of October
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: New option `DisableAutoLoggingCommand`. When adding a logging in EF Core, our library automatically log in it; This option will remove this behavior.
- ADDED: Support to `ForceOutputFromUnmodifiedRow` for [BulkMerge](https://entityframework-extensions.net/bulk-merge) (Specific to PostgreSQL)
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of October
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: `UsePostgreSqlInsertOverridingSystemValue` option to allow override system value during an insert statement (for [BulkInsert](https://entityframework-extensions.net/bulk-insert), [BulkMerge](https://entityframework-extensions.net/bulk-merge), [BulkSynchronize](https://entityframework-extensions.net/bulk-synchronize), and [BulkSaveChanges](https://entityframework-extensions.net/bulk-savechanges)). _See [PostgreSQL Insert](https://www.postgresql.org/docs/current/sql-insert.html) documentation for more detail._
- ADDED: `UsePostgreSqlInsertOverridingUserValue` option to allow override user value during an insert statement (for [BulkInsert](https://entityframework-extensions.net/bulk-insert), [BulkMerge](https://entityframework-extensions.net/bulk-merge), [BulkSynchronize](https://entityframework-extensions.net/bulk-synchronize), and [BulkSaveChanges](https://entityframework-extensions.net/bulk-savechanges)). _See [PostgreSQL Insert](https://www.postgresql.org/docs/current/sql-insert.html) documentation for more detail._
- ADDED: [Logging](https://entityframework-extensions.net/logging) now also log when a [BinaryImport](https://www.npgsql.org/doc/copy.html) is used (Specific to PostgreSQL)
- FIXED: Issue with [DeleteFromQuery](https://entityframework-extensions.net/delete-from-query) when the table/view was using a schema name
- Trial unlocked until the end of September
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
📦 Download the library **[here](https://entityframework-extensions.net/download)**
- ADDED: Support for `Microsoft.Data.SqlClient` for [BatchSaveChanges](https://entityframework-extensions.net/batch-savechanges) (Specific to EF6)
- ADDED: New options `PostgreSqlBinaryImportTimeout` that will set the timeout when a [BinaryImport](https://www.npgsql.org/doc/copy.html) is used (Specific to PostgreSQL)
- ADDED: Support to `Time` type (Specific to SQLite)
- FIXED: [BulkInsertOptimized](https://entityframework-extensions.net/bulk-insert-optimized) will no longer throw an error when passing an empty list
- UPDATED: Monthly Trial Release
- Trial unlocked until the end of September
- _NOTE: EF Extensions uses [EFCore-Pinned Versionning](https://entityframework-extensions.net/efcore-pinned-versioning) conventions_
