Note that there are some explanatory texts on larger screens.

plurals
  1. POActiveRecordValidationBase<T> not throwing ActiveRecordValidationException on Save. Model invalid
    primarykey
    data
    text
    <p>Unsolved problem....ActiveRecordValidationBase does not throw ActiveRecordValidationException on Save (Update, as well )... But, call Create throws ActiveRecordValidationException...I really don't understand why...sample code below.</p> <p>[Web.Config]</p> <pre><code>&lt;castle&gt; &lt;facilities&gt; &lt;facility id="ActiveRecordFacility" type="Castle.Facilities.ActiveRecordIntegration.ActiveRecordFacility, Castle.Facilities.ActiveRecordIntegration" isDebug="true" isWeb="true"&gt; &lt;assemblies&gt; &lt;item&gt;Base.Models&lt;/item&gt; &lt;/assemblies&gt; &lt;config&gt; &lt;add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/&gt; &lt;add key="dialect" value="NHibernate.Dialect.MsSql2005Dialect"/&gt; &lt;add key="connection.connection_string" value="ConnectionString = ${connstr}"/&gt; &lt;add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/&gt; &lt;add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/&gt; &lt;add key="hbm2ddl.auto" value="update"/&gt; &lt;add key="connection.release_mode" value="on_close" /&gt; &lt;add key="use_outer_join" value="true"/&gt; &lt;add key="use_proxy_validator" value="true"/&gt; &lt;add key="hbm2ddl.keywords" value="auto-quote"/&gt; &lt;add key="use_reflection_optimizer" value="true"/&gt; &lt;add key="bytecode.provider" value="lcg"/&gt; &lt;add key="max_fetch_depth" value="2"/&gt; &lt;add key="show_sql" value="false"/&gt; &lt;/config&gt; &lt;/facility&gt; &lt;/facilities&gt; &lt;/castle&gt; &lt;system.web&gt; &lt;httpModules&gt; &lt;add name="SessionScopeWebModule" type="Castle.ActiveRecord.Framework.SessionScopeWebModule, Castle.ActiveRecord.Web"/&gt; &lt;/httpModules&gt; &lt;/system.web&gt; </code></pre> <p>[Model (Permission - Only Properties and validation)]</p> <pre><code>#region Public Virtual Properties [PrimaryKey("permission_id", Generator = PrimaryKeyType.GuidComb)] public virtual Guid Id { get; set; } [ActiveRecordProperty("area", Length = 256, SqlType = "NVARCHAR(256)", UniqueKey = "UQ_PERMISSION")] [ValidateRegExp(@"^\D\w+$", ErrorMessageKey = "Permission_Area_Regexp", ResourceType = typeof(Common.L10n.ModelValidations.Messages))] public virtual string Area { get; set; } [ActiveRecordProperty("controller", Length = 256, SqlType = "NVARCHAR(256)", UniqueKey = "UQ_PERMISSION")] [ValidateNonEmpty(ErrorMessageKey = "Permission_Controller_NonEmpty", ResourceType = typeof(Common.L10n.ModelValidations.Messages))] [ValidateRegExp(@"^\D\w+$", ErrorMessageKey = "Permission_Controller_Regexp", ResourceType = typeof(Common.L10n.ModelValidations.Messages))] public virtual string Controller { get; set; } [ActiveRecordProperty("action", Length = 256, SqlType = "NVARCHAR(256)", UniqueKey = "UQ_PERMISSION")] [ValidateNonEmpty(ErrorMessageKey = "Permission_Action_NonEmpty", ResourceType = typeof(Common.L10n.ModelValidations.Messages))] [ValidateRegExp(@"^\D\w+$", ErrorMessageKey = "Permission_Action_Regexp", ResourceType = typeof(Common.L10n.ModelValidations.Messages))] public virtual string Action { get; set; } [ActiveRecordProperty("date_created")] public virtual DateTime DateCreated { get; set; } [ActiveRecordProperty("date_modified")] public virtual DateTime DateModified { get; set; } [HasAndBelongsToMany(Cascade = ManyRelationCascadeEnum.All, ColumnKey = "permission_id", ColumnRef = "role_id", Lazy = true, MapType = typeof(Role), Table = "permissions_in_roles")] [ValidateCollectionNotEmpty] public virtual IList&lt;Role&gt; Roles { get; set; } #endregion </code></pre> <p>[Controller - Save Action]</p> <pre><code>[HttpPost] public ActionResult Save(Permission permission) { try { if (permission.Id == Guid.Empty) permission.Create(); else permission.Update(); // permission.Save(); // Call Update or Save, with invalid model and does not throw invalid exception (???) // Create seems ok. } catch (Exception ex) { TempData["permission"] = permission; TempData["exception"] = ex; if (permission.Id == Guid.Empty) return RedirectToAction("Create"); return RedirectToAction("Edit", new { id = permission.Id }); } return RedirectToAction("List", new { scope = SearchScope.Restricted, id = permission.Id }); } </code></pre> <p>[ModelBinder]</p> <pre><code>public sealed class PermissionModelBinder : IModelBinder { #region IModelBinder Members public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var request = controllerContext.HttpContext.Request; var model = Permission.TryFind(request.Get&lt;Guid&gt;("permission.Id")) ?? new Permission(); var now = DateTime.Now; model.Area = request.Get&lt;string&gt;("permission.Area"); model.Controller = request.Get&lt;string&gt;("permission.Controller"); model.Action = request.Get&lt;string&gt;("permission.Action"); if (model.DateCreated == DateTime.MinValue) model.DateCreated = now; model.DateModified = now; return model; } #endregion } </code></pre> <p>Using MS Sql2005, ActiveRecord 3, NHibernate 3, ASP.NET MVC 2. Has anyone had a similar problem with which I am dealing with? Managed to solve?</p> <p>EDIT: I realized that only when the entity is updated, the ActiveRecordValidationBase class does not call the BeforeSave(IDictionary state) method, but when the entity is created, the class calls it. Since this method checks whether the entity is valid or not. Is this a bug or some wrong configuration?? (Debugged with ActiveRecord source and NHibernate)</p> <p>Thanks!</p> <p>Added sample in: <a href="http://www.paperscrap.com.br/downloads/arvberrorsample.zip" rel="nofollow">ARVBErrorSample.zip</a></p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload