Linq to Sql: कैसे जल्दी से एक तालिका को साफ़ करें


87

तालिका में सभी पंक्तियों को हटाने के लिए, मैं वर्तमान में निम्नलिखित कार्य कर रहा हूं:

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

हालांकि, यह उम्र ले रहा है। क्या कोई तेज़ तरीका है?


किसी भी कारण से आप तेजी से और सुरक्षित विलोपन के लिए संग्रहित खरीद का उपयोग नहीं कर रहे हैं? आप dbml पर प्रतिचित्रित खरीद कर सकते हैं
Perpetualcoder

1
क्या आपको प्रत्येक तालिका के लिए एक नहीं बनाना होगा? या?
१३:१६ पर शविश

जवाबों:


125

आप DataContext.ExecuteCommand विधि का उपयोग करके एक सामान्य SQL ट्रंकट या कमांड हटा सकते हैं :

context.ExecuteCommand("DELETE FROM Entity");

या

context.ExecuteCommand("TRUNCATE TABLE Entity");

जिस तरह से आप हटा रहे हैं वह लंबा हो रहा है क्योंकि Linq to SQL प्रत्येक इकाई के लिए एक DELETE स्टेटमेंट बनाता है , बैच हटाने / अपडेट करने के लिए अन्य प्रकार-सुरक्षित दृष्टिकोण हैं, निम्नलिखित लेखों की जांच करें:


"DELETE" शब्द को ठीक करना सुनिश्चित करें
डेविड

9
मैंने इसे +1 किया। यहाँ एक संदर्भ है जो Truncate (जो मुझे लगता है कि आप करना चाहते हैं) के बीच का अंतर समझाते हैं, और हटाएँ: mssqltips.com/tip.asp?tip=1080
डेविड

1
डेविड की टिप्पणी पर +1:
ट्रंकट

1
@ डेविड: यह समस्या एंटिटी फ्रेमवर्क ( Linq-to-Entities ) के लिए विशिष्ट है, मैंने TRUNCATEपहले
लाइनक

1
TRUNCATE किसी भी ऑटो अनुक्रमण को हटा देगा जो कि स्थापित किया गया है (आमतौर पर एक ईद स्तंभ) तो सावधान रहें यदि आप नहीं चाहते कि इसे रीसेट किया जाए। DELETE FROM नहीं होगा।
23

20

दुर्भाग्य से LINQ-to-SQL सेट आधारित क्वेरी को बहुत अच्छी तरह से निष्पादित नहीं करता है।

आप मान लेंगे

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

कुछ इस तरह अनुवाद करेंगे

DELETE FROM [Entities]

लेकिन दुर्भाग्य से यह अधिक पसंद है

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) ...

जब आप LINQ-to-SQL में बल्क अपडेट करने का प्रयास करेंगे तो आपको वही मिलेगा। एक समय में कुछ सौ से अधिक पंक्तियाँ और यह बस बहुत धीमी गति से होने वाली है।

यदि आपको बैच संचालन करने की आवश्यकता है और आप LINQ-to-SQL का उपयोग कर रहे हैं, तो आपको संग्रहीत कार्यविधि लिखने की आवश्यकता है।


12

मुझे निम्नलिखित के अनुसार एक एक्सटेंशन विधि का उपयोग करना पसंद है:

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);
  }
}

0

आप इसका उपयोग भी कर सकते हैं:

Public void BorraFilasTabla()
{
 using(basededatos db = new basededatos())
 {
  var ListaParaBorrar = db.Tabla.Tolist();
  db.Tabla.RemoveRange(ListaParaBorrar); 
 }
}

सवाल यह है: "क्या कोई तेज़ तरीका है?"। यह कैसे तेज होगा? इसके अलावा, यह SQL को LINQ नहीं है।
गर्ट अर्नोल्ड

-1

नीचे c # कोड का उपयोग 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();                        
        }
    }
}

1
कुछ स्पष्टीकरण जोड़ें
याह्या हुसैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.