MVC3 라우팅 엔진에는 평가할 데이터베이스 조회와 관련된 제한 사항이있는 몇 개의 항목이 있습니다. 예를 들어 : ManufacturererConstraint()
데이터베이스 조회를 포함하고 StoreConstraint()
제약 조건에서 데이터베이스 조회를 사용하는 MVC RouteUrl 성능
routes.MapRoute(
"Product",
"{manufacturer}/{partNumber}",
new { controller = "Product", action = "Details", manufacturer = "" },
new { manufacturer = new ManufacturerConstraint() }
);
routes.MapRoute(
"Store",
"{store}/{action}",
new { controller = "Store", action = "Index" },
new { store = new StoreConstraint() }
);
하지 않습니다. 이에서
RouteUrl("Product", new { manufacturer = product.Brand, partNumber = product.PartNumber });
세 가지 질문 :
- 우리의 사용량이 데이터베이스 조회를 야기 하는가
우리는 유사한 링크를 생성하는
RouteUrl
를 사용? - "저장소"경로의 경로를 생성 한 경우 모든 경로에 대해 테스트 할 때 조회가 생성됩니까? 아니면 지정된 경로에 대해 하나의 테스트 만 수행합니까?
- 이 용도로 데이터베이스에 충돌하는 경우
RouteUrl
을 사용하는 방법이 있습니까?
제약 조건에서 'routeDirection == RouteDirection.IncomingRequest' 인 경우에만 데이터베이스를 조회하십시오. 데이터 캐싱은 생각했지만 이론적으로 언제든지 변경 될 수 있습니다. 예를 들어 새 브랜드를 현장에 추가하여 대표자에게 보여줄 수 있거나 가능한 한 빨리 내릴 수 있습니다. 필요에 따라 캐시를 무효화하고 다시로드 할 수있는 방법으로 캐시하는 방법이 있다면 분명히 살펴볼 것입니다. – Bobson
URL 생성시 데이터베이스를 확인해야하는 이유는 무엇입니까? 데이터베이스에서 partNumber를 얻으면 이미 유효하다는 것을 알 수 있습니다. 들어오는 요청의 경우, 조치 메소드에서 해당 점검을 수행하고 존재하지 않는 경우 404를 리턴하는 것이 일반적입니다. –
세대 별로는 그렇지 않습니다. 그러나이 대답까지 나는 그것이 불가능하다는 것을 몰랐다. 들어오는 요청에 대해 문제가 발생하는 이유는 브랜드 또는 스토어 이름 (또는 다른 여러 가지)에 따라 URL에 일치하는 여러 경로가있을 수 있기 때문입니다. 따라서 우리는 하나의 거대한 액션을 가지고 모든 파싱을 처리 한 다음 올바른 컨트롤러 액션을 반환하거나 각각을 확인합니다. – Bobson