Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 约束条件下数据库查找的MVC RouteUrl性能_C#_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc Routing - Fatal编程技术网

C# 约束条件下数据库查找的MVC RouteUrl性能

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

我们的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
    而不会呢
  • 我们的使用是否会导致数据库查找

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

    如果我为“存储”路由生成了一个路由,那么它也会生成吗 查找是否针对所有路由进行测试?或者它只会起作用 指定路线的一次测试

    我想我已经回答了上面的问题

    如果它在这种用法中确实命中了数据库,有没有一种方法可以使用 那不会吗


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

    因此,在约束中,只有当
    routeddirection==routeddirection.IncomingRequest
    时,才会命中数据库?我曾想过缓存数据,但从理论上讲,它可能随时发生变化——例如,可以当场添加一个新品牌,向代表展示,或者我们可能必须尽快删除一个。如果有一种方法可以缓存它,我们可以在必要时使其失效并重新加载,我当然会对此进行研究。为什么需要在URL生成时检查数据库?如果您从数据库中获得零件号,您已经知道它是有效的。对于传入请求,通常在action方法中进行检查,如果不存在,则返回404。但直到这个答案,我才知道不可能。对传入请求执行此操作的问题是,我们有多个路由可以匹配给定的URL,这取决于第一件事是品牌还是商店名称(或其他一些事情)。因此,要么我们有一个巨大的动作来处理所有解析,然后返回正确的控制器动作,要么我们检查每个动作。