C# EF6和延迟加载,验证对上下文的更改时关联的实体为空

C# EF6和延迟加载,验证对上下文的更改时关联的实体为空,c#,entity-framework,validation,C#,Entity Framework,Validation,我觉得这很奇怪。我使用EF6加载一个实体,修改它,然后保存它。下面是一个简单的例子 负载: var clientQuery = from x in Context.Clients where x.DateTimeCreated > latest_time orderby x.DateTimeCreated descending, x.IsPosted ascending

我觉得这很奇怪。我使用EF6加载一个实体,修改它,然后保存它。下面是一个简单的例子

负载:

 var clientQuery = from x in Context.Clients
                    where x.DateTimeCreated > latest_time
                    orderby x.DateTimeCreated descending, x.IsPosted ascending
                    select x;
        this.Clients = new ObservableCollection<Client>(clientQuery);
        int cnt = this.Clients.Count;
        TotalPages = cnt / itemsPerPage;
        if (cnt % itemsPerPage != 0)
            TotalPages += 1;
        clientViewSource.Source = this.Clients;
我使用IValidatableObject类来确保所有值都有效。但是,在检查“客户端”实体时,其关联的大小写在验证期间为空。在点击SaveChanges之前,我已经验证了上下文有变化,并且客户端的“Case”不是null。我是否遗漏了一些东西,我是否期望得到一个与验证无关的结果

验证示例:

public partial class Client : IValidatableObject
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if(IsStrategic)
        {
            if(StrategicCase.ExternalLeadSource == null)
            {
                yield return new ValidationResult
                ("No external lead source set.", new [] {"StrategicCase.ExternalLeadSource"});
            }
        }
    }
}

既然您使用的是延迟加载,为什么需要在验证中检查null。访问时将加载案例,如果您的验证逻辑不需要加载案例,那么它将为null。您的意思是,即使加载了“案例”,如果它没有特定于“案例”实体的任何更改,它也不会作为父“客户机”对象的一部分传递给验证类吗,当您尝试访问它时,案例被加载,如果您没有在验证逻辑中访问它,它将为null。我正在验证逻辑中访问它,这就是为什么我知道它为null。验证逻辑在检查“客户端”实体时引发异常。客户端实体的一部分是其“Case”和“Case”的值。发布一些验证逻辑代码
public partial class Client : IValidatableObject
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if(IsStrategic)
        {
            if(StrategicCase.ExternalLeadSource == null)
            {
                yield return new ValidationResult
                ("No external lead source set.", new [] {"StrategicCase.ExternalLeadSource"});
            }
        }
    }
}