Introduction
Entity Framework is a popular Object-Relational Mapper (ORM) for .NET, which allow us to better interact with a database using .NET objects. One of the fundamental operations we are using all of us that interact with databases is adding new entities. In this article I will try to explain the two methods that we have in our disposal for entities creation Add and AddAsync. We will explore their usage, differences and best practices for when to use each other.
What is DbSet<TEntity>.Add?
The DbSet.Add method is a synchronous method used to add a new entity to the context, which is then tracked by EF Core. When SaveChanges is called, EF Core generates the necessary SQL statements to insert the new entity into the database.
Lets see a usage example of Add method
public Task AddNewEntityAsync(Entity entity, CancellationToken ct)
{
using (var context = new ApplicationDbContext())
{
context.Entities.Add(entity);
await context.SaveChangesAsync(ct);
}
}
How the above example works,
- The
Addmethod attaches the entity to the context with anAddedstate - When
SaveChangesAsyncis called the context creates anINSERTSQL command to add the entity to the database asynchronously
What is DbSet<TEntity>.AddAsync?
The AddAsync method is the asynchronous counterpart of the Add method. It is used to add a new entity to the context asynchronously. A usage example of AddAsync is given bellow
public async Task AddAsync(Entity entity)
{
using (var context = new ApplicationDbContext())
{
await context.Entities.AddAsync(entity);
await context.SaveChangesAsync();
}
}
How it works
The AddAsync method attaches the entity to the context with an Added state asynchronously
- When
SaveChangesAsyncis called, the context creates anINSERTSQL command to add the entity to the database asynchronously
Key Differences Between Add and AddAsync
Now the first question that pops in our minds is ok, so I will use Add when I am in a synchronous context and AddAsync when I am in asynchronous.
This is just one aspect; the other is how Add and AddAsync interact with the database.
As Microsoft explains
This method is async only to allow special value generators, such as the one used by 'Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo', to access the database asynchronously. For all other cases the non async method should be used.
That simple means that event though Add and AddAsync are doing the same thing, AddAsync comes with a little overhead and that is an extra interaction with the database, something that is avoided with the use of Add
If you found my article useful, feel free to share it. Also, leave a comment if something is not clear enough.
Top comments (1)
EF Core + SQL server. Performance Bug to using methods async. Please check is. github.com/dotnet/SqlClient/issues...