Pregunta

Tengo 5 entidades diferentes para las cuales se generaron datos dinámicos (con LINQTOSQL). En Insert (Insert.aspx) de cualquiera de estas entidades, si hay un error, me gustaría notificar al usuario que ocurrió el error y posiblemente mostrar algún mensaje de error genérico.

1) No estoy hablando de errores de campo obligatorios regulares, sino de algo como "Violación de restricción única"

2) Puedo hacerlo para cada página por separado haciendo algo como esto:

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) PERO, quiero crear algo muy genérico que funcione para todas las inserciones en todas las entidades

¿Fue útil?

Solución 3

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

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

}

Otros consejos

Puede personalizar la validación creando un controlador de eventos en la clase 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.");
        }

    }
}

El control DynamicValidator detecta las excepciones de validación que se generan en el modelo de datos. Las plantillas de página incluidas con un proyecto de datos dinámicos contienen un control DynamicValidator, que muestra los errores de validación en la página.

No puedo probar completamente esto para su situación, pero podría anular el 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top