我希望我的搜索类似于Stack Overflow中的搜索(即没有动作,没有斜线):
mydomain.com/search --> goes to a general search page
mydomain.com/search?type=1&q=search+text --> goes to actual search results
Run Code Online (Sandbox Code Playgroud)
我的路线:
routes.MapRoute(
"SearchResults",
"Search/{*searchType}", --> what goes here???
new { action = "Results" }
);
routes.MapRoute(
"SearchIndex",
"Search",
new { action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)
我的SearchController有以下动作:
public ActionResult Index() { ... }
public ActionResult Results(int searchType, string searchText) { ... }
Run Code Online (Sandbox Code Playgroud)
搜索结果路线不起作用.我不想使用每个人似乎都在使用的".../..."方法,因为搜索查询不是资源,所以我希望查询字符串中的数据如我所指出的那样,没有斜线 - 就像SO一样.
TIA!马特
表格:
Shop
Product
Category
Run Code Online (Sandbox Code Playgroud)
关系:
(Shop) 1 <---> n (Categories)
(Shop) 1 <---> n (Products)
(Categories) n <---> n (Products)
Run Code Online (Sandbox Code Playgroud)
级联删除:
Shop ---> Categories ... I defined this using fluent API
Shop ---> Products ... I defined this using fluent API
Categories <---> Products ... EF 4.1 automatically defines cascade for "Category_Product" join table
Run Code Online (Sandbox Code Playgroud)
问题: 上面导致"多个"级联删除路径异常.
可能的修正:
你是怎么处理这个问题的?
谢谢
sql-server entity-framework poco ef-code-first entity-framework-4.1
我正在使用 EF 4.1,带有延迟加载的 POCO。
我运行的一些示例查询:
var discountsCount = product.Discounts.Count();
var currentDiscountsCount = product.Discounts.Count(d=>d.IsCurrent);
var expiredDiscountsCount = product.Discounts.Count(d=>d.IsExpired);
Run Code Online (Sandbox Code Playgroud)
我想知道的是,我的查询是否有意义,或者性能不佳:
我是每次都访问数据库,还是结果来自 DbContext 中的缓存数据?
每次都可以“从头开始”访问导航属性,如上所述,还是应该缓存它们然后对它们执行更多查询,例如:
var discounts = product.Discounts;
var current = discounts.Count(d=>d.IsCurrent);
var expired = discounts.Count(d=>d.Expired);
Run Code Online (Sandbox Code Playgroud)
对于像下面这样的复杂情况,它是拉取整个集合然后对其执行本地操作,还是构造了一个专门的 SQL 查询,这意味着我无法重用结果以避免再次访问数据库:
var chained = discounts.OrderBy(d=>d.CreationDate).Where(d=>d.CreationDate < DateTime.Now).Count();
Run Code Online (Sandbox Code Playgroud)
感谢您的建议!
根据以下评论进行编辑
所以一旦我调用一个导航属性(它是一个集合),它就会加载整个对象图。但是,如果我使用.Count(d=>d...)orSelect(d=>d...)或Min(d=>d...)等过滤该集合呢?它是否也加载整个图形,或者仅加载最终数据?