remove registro puede porque objeto maestro from framework encontró eliminar detalle delete datos actualizar entity-framework entity

entity framework - registro - Cómo eliminar un objeto por id con marco de entidad



maestro detalle entity framework (7)

Me parece que tengo que recuperar un objeto antes de que lo elimine con el marco de entidades como a continuación

var customer = context.Customers.First(c => c.Id = 1); context.DeleteObject(customer); context.Savechanges();

Entonces necesito golpear la base de datos dos veces. ¿Hay alguna manera más fácil?


En Entity Framework 6, la acción de eliminación es Remove . Aquí hay un ejemplo

Customer customer = new Customer () { Id = id }; context.Customers.Attach(customer); context.Customers.Remove(customer); context.SaveChanges();


Estoy usando el siguiente código en uno de mis proyectos:

using (var _context = new DBContext(new DbContextOptions<DBContext>())) { try { _context.MyItems.Remove(new MyItem() { MyItemId = id }); await _context.SaveChangesAsync(); } catch (Exception ex) { if (!_context.MyItems.Any(i => i.MyItemId == id)) { return NotFound(); } else { throw ex; } } }

De esta forma, consultará la base de datos dos veces solo si se produce una excepción al intentar eliminar el elemento con la ID especificada. Entonces, si el artículo no se encuentra, devuelve un mensaje significativo; de lo contrario, simplemente devuelve la excepción (puede manejar esto de una manera más adecuada para su caso usando diferentes bloques de captura para diferentes tipos de excepción, agregue más controles personalizados usando bloques, etc.).

[Estoy usando este código en un proyecto MVC .Net Core / .Net Core con Entity Framework Core.]


La consulta de SQL crudo es la forma más rápida, supongo

public void DeleteCustomer(int id) { using (var context = new Context()) { const string query = "DELETE FROM [dbo].[Customers] WHERE [id]={0}"; var rows = context.Database.ExecuteSqlCommand(query,id); // rows >= 1 - count of deleted rows, // rows = 0 - nothing to delete. } }


Lo mismo que @Nix con un pequeño cambio para ser fuertemente tipado:

Si no desea realizar una consulta, solo cree una entidad y luego bórrela.

Customer customer = new Customer () { Id = id }; context.Customers.Attach(customer); context.Customers.DeleteObject(customer); context.SaveChanges();


Pregunta similar here .

Con Entity Framework está EntityFramework-Plus (biblioteca de extensiones).
Disponible en NuGet. Entonces puedes escribir algo como:

// DELETE all users which has been inactive for 2 years ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) .Delete();

También es útil para eliminaciones masivas.


Si no desea consultarlo, simplemente cree una entidad y luego bórrela.

Customer customer = new Customer() { Id = 1 } ; context.AttachTo("Customers", customer); context.DeleteObject(customer); context.Savechanges();


Si usa EF 1.0, esa es la forma más concisa de hacerlo. Puede haber otras formas pero son más problemas de lo que valen en mi humilde opinión.