0

MVC Foolproof Validation을 사용하는 경우 사용자 지정 유효성 검사 asynchronous을 사용할 수 있습니까? 개체가 있는지 확인하려면 사용자 지정 유효성 검사에서 DbSet 개체를 검색하고 싶습니다.비동기식 완전 확인

이것이 가능합니까? 그렇지 않은 경우 동일한 결과를 얻는 해결 방법이 있습니까? 여기

public class RequiredThumbnailAssetId : ModelAwareValidationAttribute 
{ 
    static RequiredThumbnailAssetId() { Register.Attribute(typeof(RequiredThumbnailAssetId)); } 
    public async override Task<bool> IsValid(object value, object container) 
    { 
     var model = (IGridViewItemWithAssetId)container; 
     if (model.thumbnailAssetId <= 0) 
     { 
      return false; 
     } 
     CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext(); 
     Asset asset = await db.assets.FindAsync(model.thumbnailAssetId); 
     if (asset == null) 
     { 
      return false; 
     } 
     return true; 
    } 
} 

내가 점점 오전 오류입니다 :

'( 개체, 개체) CanFindLocation.CustomValidations.RequiredThumbnailAssetId.IsValid를'여기

내 코드 반환 입력해야합니다 재정의 된 멤버와 일치 시키려면 'bool'이됩니다. 'Foolproof.ModelAwareValidationAttribute.IsValid (object, object)'

미리 감사드립니다.

답변

0

게시물 How would I run an async Task<T> method synchronously?에 정의 된 클래스를 사용하고 필요한 오버라이드와 비동기 호출을 별도의 메소드로 분리 할 수 ​​있습니다. 이렇게하면 비동기 요청에서 동기 대체를 호출 할 수 있습니다.

public class RequiredThumbnailAssetId : ModelAwareValidationAttribute 
{ 
    static RequiredThumbnailAssetId() { Register.Attribute(typeof(RequiredThumbnailAssetId)); } 

    public async override Task<bool> CheckValid(object value, object container) 
    { 
     var valid = AsyncHelpers.RunSync<bool>(() => isValid(value,container)); 
     return valid; 
    } 

    public override bool IsValid(object value, object container) 
    { 
     var model = (IGridViewItemWithAssetId)container; 
     if (model.thumbnailAssetId <= 0) 
     { 
      return false; 
     } 
     CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext(); 

     Asset asset = await db.assets.FindAsync(model.thumbnailAssetId); 

     if (asset == null) 
     { 
      return false; 
     } 
     return true; 
    }