2009-12-01 45 views
0

假設你有這樣的表結構:在PLINQO中刪除M:M的正確方法是什麼?

病人 - > PatientTag - >標籤

一個典型的N:患者和標籤米之間的關係,PatientTag是既FKS中間實體。 (PatientId和TagId)。

我想刪除一個特定的標籤,我有它的ID。我這樣做,但我想知道是否有更好的方法,因爲這是我使用PLINQO編寫的第一種方法,我不想從一開始就創建不好的做法。

  using (MyDataContext dc = DataContextFactory.GetDataContext()) 
      { 

       var options = new DataLoadOptions(); 
       options.LoadWith<Paciente>(p => p.PacienteTagList); 
       options.LoadWith<PacienteTag>(pt => pt.Tag); 
       dc.LoadOptions = options; 

       // Get the Tag we're going to remove from the DB. 
       var tag = dc.Manager.Tag.GetByKey(idTag); 

       // Remove each patient from the association. 
       foreach (Paciente pac in tag.PacienteList1) 
       { 
        // we need to retrieve it, won’t let us use the ‘pac’ object. 
        var pax = dc.Manager.Paciente.GetByKey(pac.IdPaciente); 
        pax.TagList.Remove(tag); 
       } 

       // now remove the tag 
       dc.Manager.Tag.Delete(tag.TagId); 

       // And commit the changes 
       dc.SubmitChanges(); 
      } 

感謝您對該主題的任何見解。

回答

1

簡單地使用帶級聯刪除的外鍵,然後刪除標籤本身並讓數據庫負責刪除所有引用。如果你想確保它沒有被使用,你可以先檢查是否有任何患者與之相關聯,但如果有其他進程訪問同一個數據庫,則可能需要將其包含在事務中。

+0

我忘記了這個基本想法:)謝謝。 – 2009-12-01 15:37:09

2

我同意tvanfosson在數據庫上做它。另一種方式(可能更安全)將創建一個帶格式的過程,並從你的代碼中調用它。確保它的所有包裝在一個交易中,可以在出現問題時處理回滾

+0

再次感謝Rippo,我添加了一個級聯刪除,它工作。有時答案在我們面前:) +1 – 2009-12-01 15:38:13

+0

還有一點評論:如果我要做的事情是否需要DataLoadOptions:dc.Manager.Tag.Delete(id); ? – 2009-12-01 15:39:24

+0

不,我不這麼認爲,只是打電話給刪除,看看會發生什麼! – Rippo 2009-12-01 15:59:04

相關問題