2009-10-27 46 views
1

我有5個不同的實體,爲其生成動態數據(帶有LINQTOSQL)。 任何這些實體的插入(Insert.aspx),如果有錯誤,我想通知用戶發生了錯誤,並可能顯示一些通用錯誤消息。動態數據| LINQ TO SQL |一般驗證

1)我沒有單獨做這樣的事情談論定期必填字段錯誤,但像「違反唯一約束」

2)我可以爲每一頁做的事:

protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e) { 
    if (e.Exception == null || e.ExceptionHandled) 
    { 
     Response.Redirect(table.ListActionPath); 
    } 
    else 
    { 
     //OtherErrors is the label on the page 
     OtherErrors.Visible = true; 
     OtherErrors.Text = e.Exception.Message; 
     OtherErrors.DataBind(); 
     e.ExceptionHandled = true; 
     e.KeepInInsertMode = true; 

    } 
} 

3)但是,我想創建一個非常通用的東西,將適用於所有實體的所有插入

回答

1
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode) 
{ 

    try 
    { 
     base.SubmitChanges(failureMode); 
    } 
    catch (Exception e) 
    { 
     throw new ValidationException("Something is wrong", e); 
    } 

} 
1

您可以通過在ADO.NET Entity Framewor中創建事件處理程序來自定義驗證K艙:

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.DynamicData; 
using System; 
using System.Data; 
using System.Data.Objects; 

namespace AdventureWorksLTModel 
{ 
    public partial class AdventureWorksLTEntities 
    { 
     partial void OnContextCreated() 
     { 
      this.SavingChanges += new System.EventHandler(OnSavingChanges); 
     } 

     public void OnSavingChanges(object sender, System.EventArgs e) 
     { 
      var stateManager = ((AdventureWorksLTEntities)sender).ObjectStateManager; 
      var changedEntities = ObjectStateManager.GetObjectStateEntries (EntityState.Modified | EntityState.Added); 

      // validation check logic 
      throw new ValidationException("Something went wrong."); 
     } 

    } 
} 

是在數據模型中引發的任何驗證異常由DynamicValidator控制抓獲。 Dynamic Data項目包含的頁面模板包含一個DynamicValidator控件,該控件在頁面上顯示驗證錯誤。

+0

我特別談論與LINQTOSQL動態數據。 即使認爲上面的解決方案非常好,我不認爲LINGTOSQL生成的類有什麼類似的結果 – Chicago 2009-10-27 17:55:22

1

我無法對您的情況進行完全測試,但您可以覆蓋SubmitChanges方法。

public partial class MyNorthwindDataContext : NorthwindDataContext 
{ 

    public MyNorthwindDataContext() 
    { 

    } 

    public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode) 
    { 
    //catch error logic here... 

    base.SubmitChanges(failureMode); 
    } 
} 
+0

這是行得通的,但如果我無法訪問實際的異常,那該怎麼辦。我只能在失敗模式下工作。請幫忙!!! – Chicago 2009-10-29 18:25:56

+0

我不確定我的理解。通過SubmitChanges方法,您可以在DataContext中詢問'Table '集合,並找出已經做了哪些更改並準備發送到DataStore。 – 2009-10-29 19:10:36

+0

對不起,我的壞。我想到了。我只是把try/catch放在base.SubmitChanges(failureMode)並拋出ValidationException。在我檢查ConflisMode類型之前,這是錯誤的。 – Chicago 2009-10-30 13:29:39