В ответ на вопрос Дэна:
Во-первых, посмотрите здесь: http://github.com/subsonic/SubSonic-2.0/blob/master/SubSonic/ActiveRecord/ActiveRecord.cs
В этом файле живет вся логика, которую я показал в своем другом посте.
Подтверждение: вызывается во время Save(), если Validate() возвращает false, генерируется исключение. Get-х вызывается только если свойство ValidateWhenSaving (который является константой, так что вы должны перекомпилировать SubSonic, чтобы изменить его) истинно (по умолчанию)
BeforeValidate: Вызывается во время Сохранить(), когда ValidateWhenSaving верно. Ничего не делает по умолчанию
BeforeInsert: вызывается во время сохранения(), если запись является новой. По умолчанию ничего не делает.
BeforeUpdate: вызывается во время сохранения(), если запись является новой. По умолчанию ничего не делает.
AfterCommit: вызывается после успешного ввода/обновления записи. По умолчанию ничего не делает.
В моей Validate() Я, например, сначала давайте ValidatColumnSettings по умолчанию() метод прогона, который добавит ошибки как «Максимальная строка длина превышена для столбца ProductName», если название продукта больше, чем значение, определенное в база данных. Затем я добавляю еще одну ошибку, если ProductName пуст и возвращает false, если общее число ошибок больше нуля.
Это вызовет исключение во время сохранения(), чтобы вы не смогли сохранить запись в БД.
Я бы предложил вам вызвать Validate() самостоятельно, и если он вернет false, вы увидите элементы this.Errors в нижней части страницы (простой способ) или (более элегантный) вы создаете Dictionary<string, string>
, где ключ это имя столбца и значение.
private Dictionary<string, string> CustomErrors = new Dictionary<string, string>
protected override bool Validate()
{
this.CustomErrors.Clear();
ValidateColumnSettings();
if (string.IsNullOrEmpty(this.ProductName))
this.CustomErrors.Add(this.Columns.ProductName, "cannot be empty");
if (this.UnitPrice < 0)
this.CustomErrors.Add(this.Columns.UnitPrice, "has to be 0 or bigger");
return this.CustomErrors.Count == 0 && Errors.Count == 0;
}
Затем, если Validate() возвращает false, вы можете добавить причину непосредственно помимо/под правильным полем на своей веб-странице.
Если Validate() возвращает true, вы можете безопасно вызвать Save(), но имейте в виду, что Save() может вызывать другие ошибки во время прочности, такие как «Dublicate Key ...»;
Я добавил еще одно сообщение с более подробными пояснениями –