C# 为什么我的手动模型验证速度非常慢?

C# 为什么我的手动模型验证速度非常慢?,c#,asp.net-web-api,C#,Asp.net Web Api,我试图使用ApiController的validate()函数手动验证我的模型。 就像这里: 它占用了我90%以上的cpu时间(~90秒),我只在这个类的对象上调用了一次 public class MyClass { public MyClass() { MyClass = new HashSet<MyItem>(); } [Key] public int ID { get; set; } [Required]

我试图使用ApiController的validate()函数手动验证我的模型。 就像这里:

它占用了我90%以上的cpu时间(~90秒),我只在这个类的对象上调用了一次

public class MyClass
{
    public MyClass()
    {
        MyClass = new HashSet<MyItem>();
    }

    [Key]
    public int ID { get; set; }

    [Required]
    [Index("IX_MyClass_Name", IsUnique = true)]
    [MaxLength(50)]
    public string Name { get; set; }

    [Required]
    [MaxLength(50)]
    [Display(Name = "User ID")]
    public string UserID { get; set; }

    [Required]
    [Display(Name = "Update Date")]
    public DateTime UpdateDate { get; set; }

    public virtual ICollection<MyItem> MyItems { get; set; }
}

请包含执行该操作的代码。另请参见如何创建从EF加载的实体?在将所有数据库加载到内存中进行验证之前,您是否有引用其他实体的
MyItem
实体,这些实体引用其他实体等?@SergeyBerezovskiy是。这就是正在发生的事情。无论如何要限制它吗?您应该显示获取实体的相关代码并验证实体。还请指定您正在使用的EF版本此问题在当前状态下无法回答,因为“slow”是子对象,并且显示的解决方案包括多个幕后操作(映射、数据库调用)。减少到最小可重复的情况将最有可能回答这个问题。请包括执行的代码。另请参见如何创建从EF加载的实体?在将所有数据库加载到内存中进行验证之前,您是否有引用其他实体的
MyItem
实体,这些实体引用其他实体等?@SergeyBerezovskiy是。这就是正在发生的事情。无论如何要限制它吗?您应该显示获取实体的相关代码并验证实体。还请指定您正在使用的EF版本此问题在当前状态下无法回答,因为“slow”是子对象,并且显示的解决方案包括多个幕后操作(映射、数据库调用)。减少到最小可重复性的情况最有可能回答这个问题。
[Route]
[HttpPost]
public IHttpActionResult Add(MyClassDTO myClassDTO)
{
    try
    {
         MyClass myClass = MyClassMapper.MapMyClass(myClassDTO, dbContext.ItemTypes.ToList());

         Validate(myClass);
         if (!ModelState.IsValid)
         {
             return BadRequest(ModelState);
         }
         else
         {
             dbContext.MyClasses.Add(myClass);
             dbContext.SaveChanges();
             MyClassDTO newDTO = MyClassMapper.MapDTO(myClass);
             return Created(newDTO);
         }
     }
     catch (DbUpdateException ex)
     {
        return Conflict();
     }
     catch (Exception ex)
     {
        return InternalServerError(ex);
     }
 }