2009-10-27 2 views
1

동적 데이터 (LINQTOSQL 포함)가 생성 된 5 개의 엔티티가 있습니다. 이러한 엔터티의 Insert (Insert.aspx)에 오류가 있으면 사용자에게 오류가 발생했음을 알리고 일부 일반적인 오류 메시지를 표시하려고합니다.동적 데이터 | LINQ TO SQL | 일반 유효성 검사

1) I는 별도로이 같은 수행하여 "고유 제약 조건 위반"

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 엔터티 프레임에 이벤트 처리기를 만들어 유효성을 사용자 정의 할 수 있습니다 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 컨트롤에 의해 catch됩니다. 동적 데이터 프로젝트에 포함 된 페이지 템플릿에는 페이지의 유효성 검사 오류를 표시하는 DynamicValidator 컨트롤이 포함되어 있습니다.

+0

은 내가 특별히 LINQTOSQL와 동적 데이터에 대해 이야기하고있다. 심지어 위의 솔루션을 위대한 생각, LINGTOSQL 생성 된 클래스에 대해 비슷한 비슷한 있다고 생각하지 않습니다 – Chicago

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

+0

이해할 수 있는지 잘 모르겠습니다. SubmitChanges 메서드에서 DataContext의 'Table '콜렉션을 조회하고 변경 사항이 무엇인지 알아보고 데이터 저장소로 보내려하고 있습니다. –

+0

죄송합니다. 내 잘못입니다. 나는 그것을 알아. 방금 try/catch를 base.SubmitChanges (failureMode) 주위에 놓고 ValidationException을 던졌다. ConflisMode 유형을 확인하기 전에 잘못되었습니다. – Chicago