私は特定の値の検証に苦労しています。複数のプロパティ依存関係を持つカスタム検証を作成する方法
は、(それが問題を解決のために不要な列を除外し、簡略化されています)以下のクラスを考えてみましょう:
using System;
using System.Collections.Generic;
public partial class Data_Header
{
public Data_Header()
{
this.Data_Lines = new HashSet<Data_Lines>();
}
public int DataHeaderID { get; set; }
public System.Guid CmpWwn { get; set; }
public System.Guid CntId { get; set; }
public System.DateTime DeliveryDate { get; set; }
public Nullable<int> DeliveryMethod_SysDeliveryMethodsID { get; set; }
public System.DateTime DueDate { get; set; }
public virtual Sys_DeliveryMethods Sys_DeliveryMethods { get; set; }
public virtual vw_cicmpy vw_cicmpy { get; set; }
public virtual ICollection<Data_Lines> Data_Lines { get; set; }
}
私はCmpWwnとCntIdの検証を作成するために行っていることはRequiredGuidAttributeという名前のカスタム属性を作成しています私はStackOverflowのどこかで見つけました:
public class RequiredGuidAttribute : RequiredAttribute
{
public override bool IsValid(object value)
{
var guid = CastToGuidOrDefault(value);
return !Equals(guid, default(Guid));
}
private static Guid CastToGuidOrDefault(object value)
{
try
{
return (Guid)value;
}
catch (Exception e)
{
if (e is InvalidCastException || e is NullReferenceException) return default(Guid);
throw;
}
}
}
したがって、この注釈を使用してGuid値を検証できます。これはあまり難しくないと私は原則を理解しています。今度は次の問題:
私は、DueDateの値が現在の日付の前に決してなく、決してDeliveryDateプロパティの値より前ではないことを確認したいと思います.DayDateの値は、 DeliveryMethod
私は迷っています。このような検証を作成するにはどうすればよいですか?私は単純にいくつかのif文でtrueまたはfalseを返すメソッドを使用することができますが、同じエラーハンドラを使用できるようにデータアノテーションを可能な限り使用したいと思います。私は、データベース・第1エンティティフレームワークで使用しています
6.