C#属性-修改关系对象时重新验证

C#属性-修改关系对象时重新验证,c#,asp.net-mvc,attributes,C#,Asp.net Mvc,Attributes,我有一个案例,我在我的项目中有活动,可以有一个地址、类别和其他东西的列表 现场要求活动至少有一个“访问地址” 我有一个ValidationAttribute(CheckStateAttribute),每次直接修改活动时都会触发它但当我修改连接到它的地址时,它不会触发。 [CheckState] public partial class Activity { public Activity() { this.Address = new HashSet<Addr

我有一个案例,我在我的项目中有活动,可以有一个地址、类别和其他东西的列表

现场要求活动至少有一个“访问地址”

我有一个ValidationAttribute(CheckStateAttribute),每次直接修改活动时都会触发它但当我修改连接到它的地址时,它不会触发。

[CheckState]
public partial class Activity
{
    public Activity()
    {
        this.Address = new HashSet<Address>();
    }

    public int ID { get; set; }
    public string Title { get; set; }

    public virtual ICollection<Address> Address { get; set; }
}
[检查状态]
公共部分班级活动
{
公共活动()
{
this.Address=new HashSet();
}
公共int ID{get;set;}
公共字符串标题{get;set;}
公共虚拟ICollection地址{get;set;}
}
我的一个想法是将CheckState也放在Address实体上(当然要对其进行一些更改),但是由于不仅仅是Address有更多的需求,因此验证来自许多不同实体的活动将不是一个好的解决方案


有人知道在修改实体的任何关系对象时验证实体“活动”的方法吗?

您将继承IValidatableObject并实现如下验证方法

[MetadataType(typeof(SeasonMetaData))]
    public partial class Season : IValidatableObject
    {
        #region IValidatableObject Members

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (this.StartDate.CompareTo(this.EndDate) >= 0)
            {
                yield return new ValidationResult("The Season End must be after the Season Start.", new String[] { "EndDate" });
            }
        }

        #endregion

    }
[MetadataType(typeof(季候元数据))]
公共部分课程季节:IValidatableObject
{
#表对象成员所在的区域
公共IEnumerable验证(ValidationContext ValidationContext)
{
如果(this.StartDate.CompareTo(this.EndDate)>=0)
{
收益返回新的ValidationResult(“季节结束必须在季节开始之后。”,新字符串[]{“EndDate”});
}
}
#端区
}