Pergunta

Eu tenho 5 entidades diferentes para a qual foi gerada dados dinâmicos (com LinqToSQL). Em Insert (Insert.aspx) de qualquer uma destas entidades, se houver um erro, eu gostaria de notificar o usuário que o erro aconteceu e, possivelmente, mostrar alguma mensagem de erro genérico.

1) Eu não estou falando sobre erros de campo obrigatório regulares mas algo como "Único violação de restrição"

2) eu posso fazer isso para cada página separadamente, fazendo algo parecido com isto:

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) Mas, eu quero criou algo muito genérico que irá trabalhar para todas as inserções em todas as entidades

Foi útil?

Solução 3

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

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

}

Outras dicas

Você pode personalizar a validação através da criação de um manipulador de eventos na classe 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.");
        }

    }
}

Todas as exceções de validação que são jogados no modelo de dados são capturados pelo controle DynamicValidator. Os modelos de página incluídos com um projeto Dynamic Data conter um controle DynamicValidator, que exibe os erros de validações na página.

Não consigo totalmente testar isso para a sua situação, mas, você poderia substituir o método SubmitChanges.

 public partial class MyNorthwindDataContext : NorthwindDataContext
 {

  public MyNorthwindDataContext()
  {

  }

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

   base.SubmitChanges(failureMode);
  }
 }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top