C# 约束条件下数据库查找的MVC RouteUrl性能
我们的MVC3路由引擎有两个条目,其中包含一个约束,该约束涉及要评估的数据库查找。例如:C# 约束条件下数据库查找的MVC RouteUrl性能,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,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
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
而不会呢Url.RouteUrl
运行所有约束,就像Url.Action
一样。唯一的区别是,您明确地说出了要使用的路由,而不是测试每个路由,直到其中一个匹配为止
如果我为“存储”路由生成了一个路由,那么它也会生成吗
查找是否针对所有路由进行测试?或者它只会起作用
指定路线的一次测试
我想我已经回答了上面的问题
如果它在这种用法中确实命中了数据库,有没有一种方法可以使用
那不会吗
设置约束,使其不在UrlGeneration上运行(使用
routeDirection
参数)。就我个人而言,我会缓存查找数据。因此,在约束中,只有当routeddirection==routeddirection.IncomingRequest
时,才会命中数据库?我曾想过缓存数据,但从理论上讲,它可能随时发生变化——例如,可以当场添加一个新品牌,向代表展示,或者我们可能必须尽快删除一个。如果有一种方法可以缓存它,我们可以在必要时使其失效并重新加载,我当然会对此进行研究。为什么需要在URL生成时检查数据库?如果您从数据库中获得零件号,您已经知道它是有效的。对于传入请求,通常在action方法中进行检查,如果不存在,则返回404。但直到这个答案,我才知道不可能。对传入请求执行此操作的问题是,我们有多个路由可以匹配给定的URL,这取决于第一件事是品牌还是商店名称(或其他一些事情)。因此,要么我们有一个巨大的动作来处理所有解析,然后返回正确的控制器动作,要么我们检查每个动作。