C# 为什么我的手动模型验证速度非常慢?
我试图使用ApiController的validate()函数手动验证我的模型。 就像这里: 它占用了我90%以上的cpu时间(~90秒),我只在这个类的对象上调用了一次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]
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);
}
}