Динамические данные | LINQ TO SQL | Общая проверка - PullRequest
1 голос
/ 27 октября 2009

У меня есть 5 различных объектов, для которых были сгенерированы динамические данные (с LINQTOSQL). На вставке (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 ]

1 голос
/ 27 октября 2009

Я не могу полностью проверить это для вашей ситуации, но вы можете переопределить метод SubmitChanges.

 public partial class MyNorthwindDataContext : NorthwindDataContext
 {

  public MyNorthwindDataContext()
  {

  }

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

   base.SubmitChanges(failureMode);
  }
 }
1 голос
/ 30 октября 2009
    public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{

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

}
1 голос
/ 27 октября 2009

Вы можете настроить проверку, создав обработчик событий в классе 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. Шаблоны страниц, включенные в проект Dynamic Data, содержат элемент управления DynamicValidator, который отображает ошибки проверки на странице.

...