Я пытаюсь реализовать структуру проверки в базовом классе для LINQ to SQL сущностей. Проблема в том, что событие OnValidate срабатывает правильно.
Причина в том, что OnValidate помечен как частичный, поэтому я не могу предоставить реализацию по умолчанию в базовом классе; он скрыт новым методом, объявленным классом LINQ to SQL.
Как это исправить, чтобы событие OnValidate в базовом классе вызывалось автоматически?
Пример кода приведен ниже.
public class EntityBase
{
public bool IsValid
{
get { return (GetValidationErrors().Count() == 0); }
}
public virtual IEnumerable<ValidationError> GetValidationErrors()
{
yield break;
}
public void OnValidate(System.Data.Linq.ChangeAction action)
{
//This never gets fired unless I call explicitly in the derived class.
if (!IsValid)
{
StringBuilder sb= new StringBuilder();
sb.AppendLine("Validation errors prevent saving");
foreach (ValidationError error in GetValidationErrors())
{
sb.AppendLine(String.Format("{0}: {1}", error.PropertyName, error.ErrorMessage));
}
throw new ApplicationException(sb.ToString());
}
}
}
public partial class LinqThingy: EntityBase
{
public override IEnumerable<ValidationError> GetValidationErrors()
{
if (String.IsNullOrEmpty(Name)) yield return new ValidationError("Name required", "Name");
}
//Eww nasty, don't want to have to do this.
partial void OnValidate(System.Data.Linq.ChangeAction action)
{
base.OnValidate(action);
}
}