문제

동적 데이터 (LinqToSQL 포함)가 생성 된 5 가지 엔티티가 있습니다. 이러한 엔티티의 insert (insert.aspx)에서 오류가 있으면 오류가 발생했음을 알리고 일반적인 오류 메시지가 표시 될 수 있습니다.

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) 그러나 나는 모든 엔티티에서 모든 삽입물에 맞는 매우 일반적인 것을 만들고 싶습니다.

도움이 되었습니까?

해결책 3

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

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

}

다른 팁

Ado.net Entity Framework 클래스에서 이벤트 핸들러를 작성하여 유효성 검사를 사용자 정의 할 수 있습니다.

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 컨트롤에 의해 잡힌다. 동적 데이터 프로젝트에 포함 된 페이지 템플릿에는 DynamicValidator 컨트롤이 포함되어 있으며 페이지의 유효성 검사 오류가 표시됩니다.

나는 당신의 상황에 대해 이것을 완전히 테스트 할 수는 없지만, 당신은 SubmitChanges 방법.

 public partial class MyNorthwindDataContext : NorthwindDataContext
 {

  public MyNorthwindDataContext()
  {

  }

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

   base.SubmitChanges(failureMode);
  }
 }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top