DevForce Validation 为尚未设置的导航属性返回 Ok

DevForce Validation returning Ok for navigation properties that have not been set

我一直在 DevForce 中为我们的实体进行验证,除了验证导航属性之外,我已经设法完成了我需要的一切工作。

我已经尝试在 属性 上放置一个 RequiredValueVerifier 属性,这确实在 UI 上显示了验证错误,但是一旦我使用 Manager.VerifierEngine.Execute({entitytovalidate})结果返回为正常。

我知道 DevForce 创建了 nullos,我们可以修改所述 nullos 中的属性,但我想要一种方式,当我们没有更新 nullo 的值时,VeirifierEngine 会 return 不正常。

我目前的解决方法是在用于 FKey 的 Id 上使用辅助 Int32RangeVerifier,但我对此并不满意。

尝试在不必仅为这些属性创建验证程序提供程序的情况下执行此操作。

如果有人对此有解决方案,我将不胜感激。

这是当前解决方法的示例:

namespace BearPaw.Models.Main 
{
[MetadataType(typeof(TechnicianNoteMetadata))]
public partial class TechnicianNote  {

    public static TechnicianNote Create(int byUserId, DateTimeZone clientZone, DateTime userUtc)
    {
        var newItem = new TechnicianNote()
        {
            CreatedById = byUserId,
            CreatedDate = userUtc,
            CreatedDateTz = clientZone.Id,
            ModifiedById = byUserId,
            ModifiedDate = userUtc,
            ModifiedDateTz = clientZone.Id
        };
        return newItem;
    }

}

    public class TechnicianNoteMetadata
    {
    [Int32RangeVerifier(ErrorMessage = "Note Category is required", MinValue = 1)]
    public static int NoteCategoryId;

    [RequiredValueVerifier(DisplayName = "Note Category")]
    public static NoteCategory NoteCategory;

    [RequiredValueVerifier(DisplayName = "Note Detail")]
    public static string NoteDetail;

    }
}

非常感谢

您可以创建一个自定义验证器来处理导航 属性 验证,如果您不想使用 AddVerifier 方法,可以将其直接添加到 VerifierEngine 中=14=].

例如:

public class NullEntityVerifier : PropertyValueVerifier
{
   public NullEntityVerifier(
       Type entityType,
       string propertyName,
       string displayName = null)
      : base(new PropertyValueVerifierArgs(entityType, propertyName, true, displayName)) { }

   public NullEntityVerifier(PropertyValueVerifierArgs verifierArgs)
      : base(verifierArgs) { }

   protected override VerifierResult VerifyValue(object itemToVerify, object valueToVerify, TriggerContext triggerContext, VerifierContext verifierContext)
   {
       var entity = valueToVerify as Entity;
       var msg = $"{this.ApplicableType.Name}.{this.DisplayName} is required.";
       return new VerifierResult(entity != null && !entity.EntityAspect.IsNullEntity, msg);
   }
}

要添加到引擎:

var verifier = new NullEntityVerifier(typeof(TechnicianNote), "NoteCategory");
_em1.VerifierEngine.AddVerifier(verifier);

如果您想坚持使用属性验证器,您可以为您的验证器创建自定义属性。有关详细信息,请参阅 DevForce Resource Center