Para eliminar todas las filas de una tabla, actualmente estoy haciendo lo siguiente:
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
Sin embargo, esto parece estar tardando años. ¿Hay una manera mas rápida?
c#
linq-to-sql
delete-row
Svish
fuente
fuente
Respuestas:
Puede hacer un comando SQL normal para truncar o eliminar, utilizando el método DataContext.ExecuteCommand :
context.ExecuteCommand("DELETE FROM Entity");
O
context.ExecuteCommand("TRUNCATE TABLE Entity");
La forma en que está eliminando está tardando mucho porque Linq to SQL genera una declaración DELETE para cada entidad , hay otros enfoques seguros para realizar eliminaciones / actualizaciones por lotes, consulte los siguientes artículos:
fuente
TRUNCATE
antes sin problemas en Linq-to-SQLDesafortunadamente, LINQ-to-SQL no ejecuta muy bien las consultas basadas en conjuntos.
Asumirías que
se traducirá en algo como
pero desafortunadamente es más como
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.
fuente
Me gusta usar un método de extensión, según lo siguiente:
public static class LinqExtension { public static void Truncate<TEntity>(this Table<TEntity> 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); } }
fuente
también puedes usar esto:
Public void BorraFilasTabla() { using(basededatos db = new basededatos()) { var ListaParaBorrar = db.Tabla.Tolist(); db.Tabla.RemoveRange(ListaParaBorrar); } }
fuente
El siguiente código c # se usa para Insertar / Actualizar / Eliminar / DeleteAll en una tabla de base de datos usando LINQ to SQL
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace PracticeApp { class PracticeApp { public void InsertRecord(string Name, string Dept) { LinqToSQLDataContext LTDT = new LinqToSQLDataContext(); LINQTOSQL0 L0 = new LINQTOSQL0 { NAME = Name, DEPARTMENT = Dept }; LTDT.LINQTOSQL0s.InsertOnSubmit(L0); LTDT.SubmitChanges(); } public void UpdateRecord(int ID, string Name, string Dept) { LinqToSQLDataContext LTDT = new LinqToSQLDataContext(); LINQTOSQL0 L0 = (from item in LTDT.LINQTOSQL0s where item.ID == ID select item).FirstOrDefault(); L0.NAME = Name; L0.DEPARTMENT = Dept; LTDT.SubmitChanges(); } public void DeleteRecord(int ID) { LinqToSQLDataContext LTDT = new LinqToSQLDataContext(); LINQTOSQL0 L0; if (ID != 0) { L0 = (from item in LTDT.LINQTOSQL0s where item.ID == ID select item).FirstOrDefault(); LTDT.LINQTOSQL0s.DeleteOnSubmit(L0); } else { IEnumerable<LINQTOSQL0> Data = from item in LTDT.LINQTOSQL0s where item.ID !=0 select item; LTDT.LINQTOSQL0s.DeleteAllOnSubmit(Data); } LTDT.SubmitChanges(); } static void Main(string[] args) { Console.Write("* Enter Comma Separated Values to Insert Records\n* To Delete a Record Enter 'Delete' or To Update the Record Enter 'Update' Then Enter the Values\n* Dont Pass ID While Inserting Record.\n* To Delete All Records Pass 0 as Parameter for Delete.\n"); var message = "Successfully Completed"; try { PracticeApp pa = new PracticeApp(); var enteredValue = Console.ReadLine(); if (Regex.Split(enteredValue, ",")[0] == "Delete") { Console.Write("Delete Operation in Progress...\n"); pa.DeleteRecord(Int32.Parse(Regex.Split(enteredValue, ",")[1])); } else if (Regex.Split(enteredValue, ",")[0] == "Update") { Console.Write("Update Operation in Progress...\n"); pa.UpdateRecord(Int32.Parse(Regex.Split(enteredValue, ",")[1]), Regex.Split(enteredValue, ",")[2], Regex.Split(enteredValue, ",")[3]); } else { Console.Write("Insert Operation in Progress...\n"); pa.InsertRecord(Regex.Split(enteredValue, ",")[0], Regex.Split(enteredValue, ",")[1]); } } catch (Exception ex) { message = ex.ToString(); } Console.Write(message); Console.ReadLine(); } } }
fuente