0

我们的 MVC3 路由引擎有几个条目,它们有一个约束,涉及数据库查找来评估。例如:

        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() }
        );

whereManufacturererConstraint()涉及数据库查找,StoreConstraint()但不涉及。

我们RouteUrl用于生成类似于以下内容的链接:

RouteUrl("Product", new { manufacturer = product.Brand, partNumber = product.PartNumber });

三个问题由此而来:

  1. 我们的使用会导致数据库查找吗?
  2. 如果我为“Store”路由生成了一个路由,它是否还会在针对所有路由对其进行测试时生成一个查找?还是只对指定路线进行一次测试?
  3. 如果它在这种用法中确实命中了数据库,有没有办法使用RouteUrl它?
4

1 回答 1

1

我们的使用会导致数据库查找吗?

是的,如果将约束设置为在 UrlGeneration 上工作。Url.RouteUrl运行所有约束,就像Url.Action. 唯一的区别是您明确说明要使用哪个路由,而不是测试每条路由直到匹配。

如果我为“Store”路由生成了一个路由,它是否还会在针对所有路由对其进行测试时生成一个查找?还是只对指定路线进行一次测试?

我想我在上面回答了这个问题。

如果它在这种用法中确实命中了数据库,有没有办法使用不会的 RouteUrl?

设置约束,使其不在 UrlGeneration 上运行(使用routeDirection参数)。就个人而言,我会缓存查找数据。

于 2012-11-16T17:49:32.130 回答