Динамические данные | LINQ TO SQL | Общая проверка
-
06-07-2019 - |
Вопрос
У меня есть 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
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. Шаблоны страниц, включенные в проект Dynamic Data, содержат элемент управления 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);
}
}