« Entity Framework Plus » : différence entre les versions
Apparence
Aucun résumé des modifications |
|||
Ligne 3 : | Ligne 3 : | ||
* [https://entityframework-plus.net Entity Framework Plus] | * [https://entityframework-plus.net Entity Framework Plus] | ||
* [https://github.com/zzzprojects/EntityFramework-Plus Git repository] | * [https://github.com/zzzprojects/EntityFramework-Plus Git repository] | ||
= Nuget package = | |||
<kode lang='bash'> | |||
dotnet add package Z.EntityFramework.Plus.EFCore | |||
</kode> | |||
= [https://entityframework-plus.net/ef-core-query-cache Query cache] = | = [https://entityframework-plus.net/ef-core-query-cache Query cache] = |
Version du 14 août 2023 à 14:31
Links
Nuget package
dotnet add package Z.EntityFramework.Plus.EFCore |
Query cache
var items = await context.Items.FromCacheAsync();
// The first call perform a database round trip
// The following calls will take the value from the memory instead
// for immediate methods (count, first, single, contains, any), use a query Deferred
var count = await context.Items.DeferredCount().FromCacheAsync();
|
Query Future
Allow to reduce database roundtrip by batching multiple queries in the same sql command.
var futureItems = dbContext.Items.Future();
var futureCategories = dbContext.Categories.Future();
// TRIGGER all pending queries (futureItems & futureCategories)
var items = await futureItems.ToListAsync();
// for immediate methods (count, first, single, contains, any), use a query Deferred
var futureItemCount = await context.Items.DeferredCount().FutureValue();
var count = futureItemCount.Value;
|
Audit
Allow to easily track changes, exclude/include entity or property and auto save audit entries in the database.
Batch update
![]() |
EF Core 7 ExecuteUpdate can handle this scenario |
context.Items.Where(x => ids.Contains(x.Id))
.UpdateAsync(x => new Item { Name = "new name" },
x =>
{
x.Executing = command => Console.WriteLine(command.CommandText);
});
|
UPDATE A
SET A.[Name] = @zzz_BatchUpdate_0
FROM [Items] AS A
INNER JOIN (
SELECT [i].[Id], [i].[Name]
FROM [Items] AS [i]
WHERE [i].[Id] IN (1, 2)
) AS B
ON A.[Id] = B.[Id]
|
- Updates multiples rows
- in a single database roundtrip
- without loading entities in the context
Limitations:
- Do not support Complex Type
- Do not support TPC
- Do not support TPH
- Do not support TPT
If you need to use one of this feature, you need to use the paying library Entity Framework Extensions
Batch delete
![]() |
EF Core 7 ExecuteDelete can handle this scenario |
- Deletes multiples rows
- in a single database roundtrip
- without loading entities in the context