0

엔티티 프레임 워크 6.0을 사용하는 MVC Razor 응용 프로그램이 있습니다. 그러나 DB가 다운되었거나 무언가가 있다면 IEnumerable<T>IQueryable<T>을 평가하기 시작할 때처럼 모든 종류의 임의의 장소에서 예외가 발생합니다.핸들 '기본 제공자가 한 곳에서 열리지 않음'

모델 생성자는 생성자가 예외를 throw하지 않기 때문에 어쨌든 도움이되지 않는 코드를 수정하면 덮어 쓸 생성 코드입니다. 대신, 예외가 저를 한 곳에서이 문제를 처리하고 거대한 시도의 catch 블록 내 코드의 거의 100 %를 포장 방지하기위한 좋은 방법이 있나요이

using (var dataContext = new ArchiveVMADDatabase.ArchiveDatabaseModel()) 
{ 
    IQueryable<HDeploy> deploys = Helpers.GetProdDeploysFromArchive(dataContext); 

    var query = getBranchSelectListQuery(deploys); 
    listItems.AddRange(query);// EXCEPTION IF DB IS DOWN 
} 

같은 장소에 와서? DB와 대화 할 수없는 경우 비어있는 세트 만 반환하는 것이 좋습니다.

답변

0

MVC 또는 웹 API로 작업하는지 여부는 잘 모르겠지만 웹 API에서는 Exception Filters을 사용하여 예외 처리를 중앙 집중화합니다.

예외 필터는 기본적으로 잡았 예외에 따라 특정 응답 만들 수있는 ExceptionFilterAttribute의 파생 : 당신은 어디 try {} catch {} 블록을 추가 할 필요가 없습니다

public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is NotImplementedException) 
     { 
      context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented); 
     } 
    } 
} 

를 - 웹 API가 구성된 트리거 예외가 시스템의 가장 바깥 쪽 레이어 (예 : 컨트롤러 수준)에 도달하면 자동으로 예외 필터가 적용됩니다.

특정 ApiController에 대해서만 예외 필터를 활성화하거나 모든 컨트롤러에 대해 예외 필터를 활성화 할 수 있습니다.