我正在努力驗證某些值,我希望有人能指出我正確的方向。如何創建具有多個屬性依賴關係的自定義驗證
考慮下面的類(它被簡化,省去了不必要的列了解決問題的辦法):
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屬性的值之前,甚至更多,DueDate的值應該是基於DeliveryMethod
我不知所措;我如何創建這樣的驗證?我知道,我可以簡單地使用一個方法,返回true或false與幾個if語句,但我想使用數據註釋如果可能的話,以便我可以使用相同的錯誤處理程序。
我使用的數據庫,首先與實體框架6.