В ответ на вопрос Дэна:
Сначала посмотрите здесь: http://github.com/subsonic/SubSonic-2.0/blob/master/SubSonic/ActiveRecord/ActiveRecord.cs
В этом файле живет вся логика, которую я показал в моем другом посте.
Validate: вызывается во время Save (), если Validate () возвращает false, возникает исключение.Функция Get вызывается только в том случае, если свойство ValidateWhenSaving (которое является константой, поэтому для его изменения необходимо перекомпилировать SubSonic) имеет значение true (по умолчанию)
BeforeValidate: вызывается во время сохранения (), когда ValidateWhenSaving имеет значениеправда.По умолчанию ничего не делает
BeforeInsert: Вызывается во время Save (), если запись новая.По умолчанию ничего не делает.
BeforeUpdate: Вызывается во время Save (), если запись новая.По умолчанию ничего не делает.
AfterCommit: вызывается после успешной вставки / обновления записи.По умолчанию ничего не делает.
В моем примере Validate () я сначала позволил запустить метод ValidatColumnSettings () по умолчанию, который добавит ошибки, такие как «Максимальная длина строки превышена для столбца ProductName», еслиНазвание продукта длиннее значения, определенного в базе данных.Затем я добавляю еще одну строку ошибки, если ProductName пусто, и возвращаю false, если общее количество ошибок больше нуля.
Это вызовет исключение во время Save (), поэтому вы не сможете сохранить запись в БД.
Я бы посоветовал вам вызвать Validate () самостоятельно, и если он вернет false, вы отобразите элементы этого. Ошибки внизу страницы (простой способ) или (более элегантно) вы создадите 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 ...»;