2014-08-29 67 views
2

我正在爲SQL Server數據庫創建同步系統。Linq to SQL:使用泛型類型方法刪除記錄

public void UpdateTable<T>(List<T> current, List<T> changed) where T : class 
    { 
     var deletedRecords = current.Except(changed); 
     foreach (T entity in deletedRecords) 
     { 
      _context.GetTable<T>().DeleteOnSubmit(entity); 
     } 
     _context.SubmitChanges(); 
    } 

但在DeleteOnSubmit操作與InvalidOperationException: Unable to remove an embedded object.

數據庫的設計與CASCADE刪除操作失敗。怎麼了?謝謝!

+0

如果您使用靜態(共享)上下文...不要! – 2014-08-29 11:53:48

+0

你可能想檢查一下:[何時/爲什麼在SQL Server中使用級聯?](http://stackoverflow.com/questions/59297/when-why-to-use-cascading-in-sql-server)和[我應該使用CASCADE DELETE規則?](http://stackoverflow.com/questions/278392/should-i-use-the-cascade-delete-rule)。 – Neolisk 2014-08-29 13:00:11

回答

1

你見過this的帖子嗎?在本例中,它創建了一個類型T的通用接口,該類型繼承自。該界面公開了刪除(T Item)的方法,它執行與您所做的相似的操作。問題可能是您需要爲每個對象執行db.SubmitChanges(),但我不確定。因此,我建議在您的deletedRecords列表中爲每個對象調用此方法。希望能幫助到你!

// Deletes the data values in the LINQ to SQL generated class. 
    public virtual bool Delete(T Item) 
    { 
     using (TestDBContext db = new TestDBContext()) 
     { 
      db.GetTable<T>().DeleteOnSubmit(Item); 
      db.SubmitChanges(); 
      return true; 
     } 
    }