Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
DbContext.SaveChanges() es una de las dos técnicas para guardar los cambios en la base de datos con EF. Con este método, se realizan uno o varios cambios controlados (agregar, actualizar, eliminar) y, a continuación, se aplican esos cambios llamando al método SaveChanges
. Como alternativa, ExecuteUpdate y ExecuteDelete se puede usar sin implicar al rastreador de cambios. Para una comparación introductoria de estas dos técnicas, consulte la página de información general sobre cómo guardar datos.
Sugerencia
Puede ver un ejemplo de este artículo en GitHub.
Agregar datos
Use el DbSet<TEntity>.Add método para agregar nuevas instancias de las clases de entidad. Los datos se insertarán en la base de datos cuando llame a DbContext.SaveChanges():
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Sugerencia
Los métodos Add
, Attach
y Update
trabajan sobre el grafo completo de entidades que se les pasa, como se describe en la sección Datos relacionados. Como alternativa, la propiedad EntityEntry.State se puede usar para establecer el estado de una sola entidad. Por ejemplo: context.Entry(blog).State = EntityState.Modified
.
Actualizar datos
EF detecta automáticamente los cambios realizados en una entidad existente seguida por el contexto. Esto incluye las entidades que se cargan o consultan desde la base de datos y las entidades que se agregaron y guardaron anteriormente en la base de datos.
Simplemente modifique los valores asignados a las propiedades y, a continuación, llame a SaveChanges
:
using (var context = new BloggingContext())
{
var blog = await context.Blogs.SingleAsync(b => b.Url == "http://example.com");
blog.Url = "http://example.com/blog";
await context.SaveChangesAsync();
}
Eliminación de datos
Utilice el método DbSet<TEntity>.Remove para eliminar instancias de sus clases de entidad.
using (var context = new BloggingContext())
{
var blog = await context.Blogs.SingleAsync(b => b.Url == "http://example.com/blog");
context.Blogs.Remove(blog);
await context.SaveChangesAsync();
}
Si la entidad ya existe en la base de datos, se eliminará durante SaveChanges
. Si la entidad aún no se ha guardado en la base de datos (es decir, se rastrea como nuevo), se quitará del contexto y ya no se insertará cuando se llame a SaveChanges
.
Varias operaciones en un solo SaveChanges
Puede combinar varias operaciones Add/Update/Remove en una sola llamada a SaveChanges
:
using (var context = new BloggingContext())
{
// seeding database
context.Blogs.Add(new Blog { Url = "http://example.com/blog" });
context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" });
await context.SaveChangesAsync();
}
using (var context = new BloggingContext())
{
// add
context.Blogs.Add(new Blog { Url = "http://example.com/blog_one" });
context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" });
// update
var firstBlog = await context.Blogs.FirstAsync();
firstBlog.Url = "";
// remove
var lastBlog = await context.Blogs.OrderBy(e => e.BlogId).LastAsync();
context.Blogs.Remove(lastBlog);
await context.SaveChangesAsync();
}
Nota:
Para la mayoría de los proveedores de bases de datos, SaveChanges
es transaccional. Esto significa que todas las operaciones se realizan correctamente o no y las operaciones nunca se dejan parcialmente aplicadas.