Entity Framework Tutorial Gráfico de entidad
En Entity Framework, DbSet
proporciona los métodos Add and
Adjuntar para el recorrido gráfico de la entidad y determinar si una entidad debe marcarse como Agregada (para insertar), Modificada (para actualizar), Sin cambios (no hacer nada) o Eliminada (para eliminar).
- Estos métodos funcionan bien para entidades individuales o en casos en los que no le importa que todas las propiedades se incluyan en una declaración de ACTUALIZACIÓN, ya sea que hayan sido modificadas o no.
- Pero no es tan fácil actualizar un gráfico de entidad en el escenario desconectado, y necesita una consideración cuidadosa del diseño.
- El problema principal es que el contexto no sabe qué operación se realizó en un gráfico de entidad desconectada en el lado del cliente.
Identificar el estado de cada entidad en el gráfico de entidades
Para identificar el estado de la entidad en el gráfico de la entidad, puede usar la propiedad de clave principal de cada entidad para determinar su estado.
- Si un valor de la propiedad clave es el valor predeterminado del tipo de datos CLR, entonces es una nueva entidad.
- De lo contrario, es una entidad existente, y debe haberse guardado previamente y ahora necesita actualizarse.
En el siguiente ejemplo, el gráfico de entidades del libro con las entidades de Autor y Categorías relacionadas debe guardarse en la base de datos.
Book book = new Book() { Title = "iOS Fundamentals", Author = new Author() { AuthorId = 1, Name = "Mark" }, Categories = new List<Category>() { programmingCat, new Category() { CategoryName = "iOS"}, new Category() { CategoryName = "Swift"} } };
El siguiente método InsertOrUpdate
guarda el gráfico de entidades del libro, que incluye las entidades relacionadas de Author
y Categorías.
public static void InsertOrUpdate(Book book) { using(var context = new BookStore()) { context.Entry(book).State = book.BookId == 0 ? EntityState.Added : EntityState.Modified; context.Entry(book.Author).State = book.Author.AuthorId == 0 ? EntityState.Added : EntityState.Modified; foreach (var cat in book.Categories) { context.Entry(cat).State = cat.CategoryId == 0 ? EntityState.Added : EntityState.Modified; } context.SaveChanges(); } }
El contexto establece un estado apropiado para cada entidad en función del valor de la propiedad clave.
- Si es cero, entonces establece el estado
Added
; de lo contrario, establece el estadoModified
. - El método SaveChanges () ejecutará el comando
INSERT
oUPDATE
apropiado en la base de datos para cada entidad.