Por favor dígame si este es un enfoque decente para eliminar una entidad sin recuperarlo dado que tengo la identificación.Código de Entity Framework Primero eliminar por ID sin recuperar (estilo genérico)
que tienen una tienda genérico con la siguiente interfaz (yo sólo voy a mostrar Eliminar):
public interface IStore : IReadOnlyStore
{
void Delete<TEntity>(TEntity entity) where TEntity : class, IEntity, new();
void SaveChanges();
}
Y en la clase tienda concreta de esa interfaz, aquí está mi método de eliminación:
public void Delete<TEntity>(TEntity entity) where TEntity : class, IEntity, new()
{
var obj = Ctx.Entry(entity);
if (obj.State == System.Data.EntityState.Detached)
{
Ctx.Set(typeof(TEntity)).Attach(obj.Entity);
}
Ctx.Set(typeof(TEntity)).Remove(obj.Entity);
}
he probado tanto Newing hasta una entidad:
Store.Delete(new Foo() { Id = request.Entity.Id });
, así como ir a buscar una entidad y luego callos ng eliminar.
A través de la depuración, tengo el efecto deseado en ambos escenarios.
Solo quiero asegurarme de que este sea un buen diseño y que no haya efectos secundarios en este enfoque.
Como referencia, Ctx es solo el propio DbContext.
Gracias.
Gracias por su comentario. Probé tu sugerencia, pero mató a más del 50% de mis pruebas unitarias. El error común parece ser: Se produjo un error al guardar las entidades que no exponen las propiedades de las claves foráneas para sus relaciones. La propiedad EntityEntries devolverá null porque no se puede identificar una sola entidad como el origen de la excepción. El manejo de excepciones al guardar puede ser más fácil al exponer propiedades de clave foránea en sus tipos de entidad. – Forest
Vea la InnerException para más detalles. ---> System.Data.UpdateException: una relación del conjunto de asociaciones 'Foo_Siblings' está en el estado 'Eliminado'. Dadas las restricciones de multiplicidad, un 'Foo_Siblings_Target' correspondiente también debe estar en el estado 'Eliminado'. – Forest