2009-08-24 10 views
12

मैं linq से sql के लिए बहुत नया हूं और मुझे यकीन नहीं है कि वास्तव में रिकॉर्ड को कैसे हटाया जाए।linq में sql में कैसे हटाएं?

तो मैं इस ट्यूटोरियल को देख कर दिया गया

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

अद्यतन के लिए

तो वे

NorthwindDataContext db = new NorthwindDataContext(); 

Product product = db.Products.Single(p => p.ProductName == "Toy 1"); 

product.UnitPrice == 99; 
product.UnitsInStock = 5; 

db.SubmitChanges(); 

है के लिए हटाने पर उन्हें

NorthwindDataContext db = new NorthwindDataContext(); 

var toyProducts = from p in db.Producsts 
       where p.ProductName.Contains("Toy") 
        select p; 

db.Products.RemoveAll(toyProducts); 

db.SubmitChanges(); 

है तो मैं हर क्वेरी करने के लिए है उस रिकॉर्ड को हटाने के लिए रिकॉर्ड प्राप्त करने के लिए समय? जैसे मैं अद्यतन के साथ ऐसा करने के तरीके को देख सकता हूं क्योंकि आपको इसे एक रिकॉर्ड देने की आवश्यकता है जो पहले अपडेट करना है और फिर परिवर्तन करना है, इसलिए मैं क्वेरीिंग भाग को समझता हूं लेकिन हटाए जाने के साथ नहीं।

जैसा कि आप बस उसमें भेज नहीं सकते हैं जिसे आप हटाना चाहते हैं और यह जाता है और इसे हटा देता है? आपको इसे पहले क्यों प्राप्त करना होगा और फिर इसे हटाने के लिए कहें?

क्या यह डेटाबेस पर 2 हिट नहीं है?

इसके अलावा मेरे पास विदेशी कुंजी संबंध है जो मैं काम करने की कोशिश कर रहा हूं। तो मैं इस

public ViewResult(string param1, string param2) 
{ 
    Table A = new Table A 
    A.Field1 = param1; 
    A.Field2 = param2; 

    Delete(A); 
} 

private void Delete(Table A) 
{ 
    DbContext.A.DeleteAllOnsubmit(A.TableB); 
    DbContext.A.DeleteAllOnSubmit(A.TableC); 
    DbContext.A.DeleteOnSubmit(A); 

} 

तो यह विफल रहता है यह इस संदेश के साथ आता है "एक इकाई है कि संलग्न नहीं किया गया निकाला नहीं जा सकता।"

तो मैं देख सकता हूं कि पहली 2 लाइनें डिलीट विधि में क्यों विफल हो जाएंगी, क्योंकि मैंने एक नई वस्तु बनाई है और उनके ऑब्जेक्ट में कुछ भी नहीं है जिसमें टेबलबी और टेबलसी के बारे में कोई जानकारी है।

हालांकि मैं नहीं देख सकता कि आखिरी पंक्ति अभी भी विफल क्यों होती है, भले ही 2 अन्य लाइनें न हों।

जैसा कि मैंने सोचा कि यह कैसे काम करेगा यह मेरी टेबल ए क्लास ऑब्जेक्ट लेगा जो मैंने पास किया था और उसमें मौजूद जानकारी के लिए तालिका को देखकर। हालांकि यह मामला प्रतीत नहीं होता है।

तो क्या मुझे पहले जानकारी लेनी है और फिर इसे प्राप्त करने के लिए एक क्वेरी करें और फिर इसे हटा दें, उदाहरण के लिए?

इसके अलावा removeAll() और DeleteAllOnSubmit() के बीच क्या अंतर है।

जैसा कि मैंने कहा था कि मैं एसक्यूएल के लिए linq के लिए नया हूं और समय बाधाओं के कारण बैठने और उस पर एक पुस्तक पढ़ने में सक्षम नहीं हूं। एक बार मेरे पास अधिक समय हो जाने पर मैं शायद एक पुस्तक के माध्यम से पढ़ूंगा।

धन्यवाद

उत्तर

13

आप अपने एक सवाल में कई सवाल है, लेकिन मैं सबसे सरल के साथ शुरू होगा संलग्न के बारे में, अगर आप पहले से ही प्राथमिक कुंजी है। यदि आपके पास प्राथमिक कुंजी नहीं है तो मैंने हमेशा एक डिलीट किया है, फिर हटाएं, लेकिन, जब भी मैं एक fetch करता हूं, तो मैं अपडेट और डिलीट के लिए प्राथमिक कुंजी स्टोर करता हूं।

यह प्राथमिक कुंजी से हटा देगा, लेकिन यदि आपके पास ऐसा है तो बस नीचे दिए गए अनुसार संलग्न करें और हटाएं कॉल करें। मैं DLINQ द्वारा आवश्यक ऑब्जेक्ट को पास नहीं करता क्योंकि मैं इसे बदलना चाहता हूं, इसलिए मैं इसे अलग-अलग उपयोगकर्ता ऑब्जेक्ट में पास कर सकता हूं और पीके को बिजनेस क्लास से खींच सकता हूं और इसे डीएओ क्लास में डाल सकता हूं।

var db = new MeatRequestDataContext();    
if (input.UserID > 0) 
{ 
    entity = new User() 
    { 
     UserID = input.UserID 
    }; 
    db.Users.Attach(entity); 
    db.Users.DeleteOnSubmit(entity); 
} 
+0

मैंने यह कोशिश की है लेकिन ऐसा लगता है कि यह रिकॉर्ड का पता लगाने के लिए ऑब्जेक्ट पर सभी मानों का उपयोग करने का प्रयास करता है। पंक्ति के साथ यह त्रुटियां नहीं मिलीं या बदल दी गई हैं। विचार? – drizzie

+0

@drizzie - क्या आपने केवल अपनी इकाई के उदाहरण में कुंजी डाली? –

+0

हां, मेरा कोड आपके जैसा है। – drizzie

2
 SupportDataDataContext Retrive = new SupportDataDataContext(); 
     // SupportDataDataContext delete = new SupportDataDataContext(); 

     Topic res = Retrive.GetTable<Topic>().Single(t => t.ID == topicID); 


     if (res != null) 
     { 
      Retrive.Topics.DeleteOnSubmit(res); 
      Retrive.SubmitChanges(ConflictMode.ContinueOnConflict); 
     } 
3

इस LINQ द्वारा मेज से पंक्ति को हटाने के लिए हो query.may यह मदद करता है एक आसान तरीका है।

 var summary_delete = database.summeries.Find(id); 

     var delete = database.summeries.Remove(summary_delete); 

     database.SaveChanges(); 

संदर्भ: http://mvc4asp.blogspot.in/2013/09/how-to-delete-table-row-in-sql-database.html

2
Inserted_LINQDataContext db = new Inserted_LINQDataContext(); 
       Item itm = new Item(); 
       int ID = Convert.ToInt32(TextBox1.Text); 
       var DeleteID = from d in db.Items 
           where d.id == ID 
           select d; 
       db.Items.DeleteAllOnSubmit(DeleteID); 
       db.SubmitChanges(); 
       Label2.Text = "Record deleted Successfully."; 
       TextBox1.Text = ""; 

जहां मद तालिका नाम है, Linserted_LINQDataContext अपने Linq डीबी नाम है, आईडी मद तालिका में कॉलम नाम है। आइटम linq में आइटम तालिका का उपनाम नाम है।