我们的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 });
有三个问题:
RouteUrl
不会?答案 0 :(得分:1)
我们的用法会导致数据库查找吗?
是的,如果约束设置为在UrlGeneration上工作。 Url.RouteUrl
运行所有约束,就像Url.Action
一样。唯一的区别是你明确地说明了你想要使用哪条路线,而不是在匹配之前测试每条路线。
如果我为“存储”路线生成路线,那么它也会生成 查找,因为它测试所有路由?或者只会这样做 对指定路线进行一次测试?
我想我在上面回答了这个问题。
如果在这种情况下确实遇到了数据库,有没有办法可以使用 RouteUrl不会吗?
设置约束,使其不在UrlGeneration上运行(使用routeDirection
参数)。就个人而言,我会缓存查找数据。