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.
Además de las entidades aisladas, también puede usar las relaciones definidas en el modelo.
Sugerencia
Puede ver un ejemplo de este artículo en GitHub.
Adición de un gráfico de nuevas entidades
Si crea varias entidades relacionadas, agregar una de ellas al contexto hará que los demás también se agreguen.
En el ejemplo siguiente, el blog y tres entradas relacionadas se insertan en la base de datos. Las entradas se buscan y agregan, porque son accesibles a través de la propiedad de navegación Blog.Posts.
using (var context = new BloggingContext())
{
var blog = new Blog
{
Url = "http://blogs.msdn.com/dotnet",
Posts = new List<Post>
{
new Post { Title = "Intro to C#" },
new Post { Title = "Intro to VB.NET" },
new Post { Title = "Intro to F#" }
}
};
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Sugerencia
Use la propiedad EntityEntry.State para establecer el estado de una sola entidad. Por ejemplo: context.Entry(blog).State = EntityState.Modified.
Adición de una entidad relacionada
Si hace referencia a una entidad nueva desde la propiedad de navegación de una entidad a la que el contexto ya hace seguimiento, se detectará la entidad y se insertará en la base de datos.
En el ejemplo siguiente, la entidad post se inserta porque se agrega a la propiedad Posts de la entidad blog que se recuperó de la base de datos.
using (var context = new BloggingContext())
{
var blog = await context.Blogs.Include(b => b.Posts).FirstAsync();
var post = new Post { Title = "Intro to EF Core" };
blog.Posts.Add(post);
await context.SaveChangesAsync();
}
Cambio de relaciones
Si cambia la propiedad de navegación de una entidad, los cambios correspondientes se realizarán en la columna de clave externa de la base de datos.
En el ejemplo siguiente, la post entidad se actualiza para que pertenezca a la nueva blog entidad porque su Blog propiedad de navegación está establecida para que apunte a blog. Tenga en cuenta que blog también se insertará en la base de datos porque es una nueva entidad a la que hace referencia la propiedad de navegación de una entidad que ya está siendo rastreada por el contexto (post).
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://blogs.msdn.com/visualstudio" };
var post = await context.Posts.FirstAsync();
post.Blog = blog;
await context.SaveChangesAsync();
}
Eliminación de relaciones
Puede quitar una relación estableciendo una navegación de referencia en nullo quitando la entidad relacionada de una navegación de colección.
Quitar una relación puede tener efectos secundarios en la entidad dependiente, según el comportamiento de eliminación en cascada configurado en la relación.
De forma predeterminada, para las relaciones necesarias, se configura un comportamiento de eliminación en cascada y la entidad secundaria o dependiente se eliminará de la base de datos. Para las relaciones opcionales, la eliminación en cascada no está configurada de forma predeterminada, pero la propiedad de clave externa se establecerá en NULL.
Consulte Relaciones obligatorias y opcionales para obtener información sobre cómo se puede configurar la obligatoriedad de las relaciones.
Consulte Eliminación en cascada para obtener más información sobre cómo funcionan los comportamientos de eliminación en cascada, cómo se pueden configurar explícitamente y cómo se seleccionan por convención.
En el ejemplo siguiente, la relación entre Blog y Post es necesaria, por lo que la eliminación en cascada se aplica por convención. Quitar la entidad post de blog.Posts la convierte en huérfana, por lo que EF Core la elimina de la base de datos cuando se llama a SaveChanges. Para obtener más información, vea Romper una relación.
using (var context = new BloggingContext())
{
var blog = await context.Blogs.Include(b => b.Posts).FirstAsync();
var post = blog.Posts.First();
blog.Posts.Remove(post);
await context.SaveChangesAsync();
}