MVC RouteUrl在约束中使用数据库查找的性能

时间:2012-11-16 17:13:57

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

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

其中ManufacturererConstraint()涉及数据库查找而StoreConstraint()没有。

我们正在使用RouteUrl生成类似于以下链接:

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

有三个问题:

  1. 我们的用法会导致数据库查找吗?
  2. 如果我为“存储”路由生成路由,那么它是否会生成查找,因为它会针对所有路由进行测试?或者它只会对指定路线进行一次测试吗?
  3. 如果它确实在此用法中访问了数据库,是否有办法使用RouteUrl不会?

1 个答案:

答案 0 :(得分:1)

  

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

是的,如果约束设置为在UrlGeneration上工作。 Url.RouteUrl运行所有约束,就像Url.Action一样。唯一的区别是你明确地说明了你想要使用哪条路线,而不是在匹配之前测试每条路线。

  

如果我为“存储”路线生成路线,那么它也会生成   查找,因为它测试所有路由?或者只会这样做   对指定路线进行一次测试?

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

  

如果在这种情况下确实遇到了数据库,有没有办法可以使用   RouteUrl不会吗?

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