Để xóa tất cả các hàng trong bảng, tôi hiện đang thực hiện như sau:
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
Tuy nhiên, điều này dường như mất nhiều thời gian. Có cách nào nhanh hơn?
Để xóa tất cả các hàng trong bảng, tôi hiện đang thực hiện như sau:
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
Tuy nhiên, điều này dường như mất nhiều thời gian. Có cách nào nhanh hơn?
Câu trả lời:
Bạn có thể thực hiện lệnh cắt ngắn hoặc xóa SQL bình thường, sử dụng phương thức DataContext.ExecuteCommand :
context.ExecuteCommand("DELETE FROM Entity");
Hoặc là
context.ExecuteCommand("TRUNCATE TABLE Entity");
Quá trình xóa bạn mất nhiều thời gian vì Linq to SQL tạo câu lệnh DELETE cho mỗi thực thể , có các cách tiếp cận an toàn kiểu khác để thực hiện xóa / cập nhật hàng loạt, hãy kiểm tra các bài viết sau:
TRUNCATE
trước khi có những vấn đề về LINQ-to-SQL
Thật không may, LINQ-to-SQL không thực thi các truy vấn dựa trên bộ rất tốt.
Bạn sẽ cho rằng
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
sẽ dịch sang một cái gì đó như
DELETE FROM [Entities]
nhưng tiếc là nó giống
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) ...
Bạn sẽ thấy tương tự khi cố cập nhật hàng loạt trong LINQ-to-SQL. Bất kỳ hơn vài trăm hàng cùng một lúc và nó chỉ đơn giản là sẽ quá chậm.
Nếu bạn cần thực hiện các hoạt động hàng loạt và bạn đang sử dụng LINQ-to-SQL, bạn cần viết các thủ tục được lưu trữ.
Tôi thích sử dụng Phương pháp mở rộng, theo những điều sau:
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);
}
}
bạn cũng có thể sử dụng cái này:
Public void BorraFilasTabla()
{
using(basededatos db = new basededatos())
{
var ListaParaBorrar = db.Tabla.Tolist();
db.Tabla.RemoveRange(ListaParaBorrar);
}
}
Mã bên dưới c # được sử dụng để Chèn / Cập nhật / Xóa / Xóa Tất cả trên bảng cơ sở dữ liệu bằng cách sử dụng 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();
}
}
}