동적 데이터 | linq to sql | 일반 검증
-
06-07-2019 - |
문제
동적 데이터 (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);
}
}
제휴하지 않습니다 StackOverflow