Я борюсь с проверкой определенных ценностей, и я надеюсь, что кто-то может указать мне в правильном направлении.Как создать пользовательскую проверку с несколькими зависимостями свойств
Рассмотрим класс ниже (это был упрощен, оставляя ненужные столбцы для решения вопроса):
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.