Saltar al contenido

Linq to Sql: Cómo borrar rápidamente una tabla

No dejes de divulgar nuestros tutoriales y códigos en tus redes, apóyanos para ampliar esta comunidad.

Solución:

Podría ejecutar un comando normal de SQL truncado o eliminado, usando el método DataContext.ExecuteCommand:

context.ExecuteCommand("DELETE FROM Entity");

O

context.ExecuteCommand("TRUNCATE TABLE Entity");

La forma en que está eliminando lleva mucho tiempo porque Linq to SQL genera una instrucción DELETE para cada entidadHay otros tipo seguro enfoques para realizar eliminaciones/actualizaciones por lotes, consulte los siguientes artículos:

  • Actualizaciones y eliminaciones por lotes con LINQ to SQL
  • Extensión de LINQ to SQL: Eliminación por lotes con expresión Lambda

Desafortunadamente, LINQ-to-SQL no ejecuta muy bien las consultas basadas en conjuntos.

Asumirías que

context.Entities.DeleteAllOnSubmit(context.Entities); 
context.SubmitChanges(); 

se traducirá a algo como

DELETE FROM [Entities]

pero desafortunadamente es más como

DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...

Encontrará lo mismo cuando intente realizar una actualización masiva en LINQ-to-SQL. Más de unos pocos cientos de filas a la vez y simplemente será demasiado lento.

Si necesita realizar operaciones por lotes y está utilizando LINQ-to-SQL, debe escribir procedimientos almacenados.

Me gusta usar un método de extensión, según lo siguiente:

public static class LinqExtension

  public static void Truncate(this Table table) where TEntity : class
  
    var rowType = table.GetType().GetGenericArguments()[0];
    var tableName = table.Context.Mapping.GetTable(rowType).TableName;
    var sqlCommand = String.Format("TRUNCATE TABLE 0", tableName);
    table.Context.ExecuteCommand(sqlCommand);
  

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *