2009-07-31 97 views
6

任何人都可以告訴我您是否/如何驗證Linq2Sql中的數據上下文中的更改調用SubmitChanges()之前。我遇到的情況是我創建了一個上下文,執行多個操作並在其他處理任務旁邊添加了許多插入,然後在提交失敗時回滾。在SubmitChanges之前驗證Linq2Sql()

我希望做的是在某些任務完成後進行某種「驗證()」調用,以便在提交整個作業前處理它。

回答

6

要獲得所有在數據方面的變化,你可以調用

ChangeSet changes = dataContext.GetChangeSet(); 

// An IList<Object> 
changes.Deletes; 
changes.Inserts; 
changes.Updates; 

我所擁有的是每個值對象有一個validate方法。我使用attibutes來定義不同種類的驗證。我手動這樣做的原因是因爲我有一個數字,可能是數據庫中的一個int和代碼,如果我保存一個年齡,則值1002可能無效。所以我可以給出一系列的價值觀等。 。

如果每個值對象都從一個基礎對象繼承,它將使它們更容易迭代。假設你在你的基類中有一個Validate方法。

我會指出這個工作,你將不得不編輯生成的代碼,或者滾動你自己的值對象。我通常會推出自己的產品,因爲我如何使用它們進行驗證。

+0

都沒發現.GetChangeSet()方法之前!感謝那! +1 – StevenMcD 2009-07-31 14:16:14

5

您還可以將OnValidate()函數與LINQ-to-SQL實體的部分類一起使用。 OnValidate()將在SubmitChanges()期間被調用,但在數據發送到數據庫之前。 OnValidate()的一個好處是您可以通過ChangeAction枚舉區分CRUD操作。

例如,

public partial class YourEntity 
{ 
    partial void OnValidate(System.Data.Linq.ChangeAction action) 
    { 
     if(action == System.Data.Linq.ChangeAction.Insert) 
      // Do insert 
     ... etc. ... 
    } 
}