我在 asp.net mvc 网站的应用程序启动例程中缓存 EF 实体的特定列表。
protected void Application_Start()
{
CountriesDbContext db = new CountriesDbContext();
HttpRuntime.Cache["Countries"] = db.Countries.ToList();
}
当我像下面这样要求它时,我失去了口音不敏感的行为
private List<Country> cache = (List<Country>)HttpRuntime.Cache["Countries"];
//Accent insensitive behaviour is lost !
results = cache.Where(c => c.FR.ToLower()
.Contains(search.ToLower())); //for example : e will not match é
如果我使用 dbContext "正常"请求它,则会保留对口音不敏感的行为。
private CountriesDbContext db = new CountriesDbContext();
//Accent insensitive behaviour search
results = db.Countries.Where(c => c.FR.ToLower()
.Contains(search.ToLower())); //for example : e will match é
为什么会这样?以及缓存实体时如何保留重音不敏感行为?
排序
规则是一个 SQL Server 概念,这就是为什么查询适用于数据库数据,但不适用于 .Net 比较适用的内存数据。
因此,您需要为 .Net 中的缓存实现一个不区分重音的比较器,如本答案中所述。