缓存EntityFramework实体时,Accent Insensitive(AI)归类将丢失

时间:2012-12-05 09:54:52

标签: sql-server asp.net-mvc-3 entity-framework entity-framework-4.1

我在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 é

如果我要求它&#34;通常&#34;使用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 é

为什么?以及如何在缓存实体时保留重音不敏感行为?

1 个答案:

答案 0 :(得分:1)

排序规则是一种SQL Server概念,这就是查询对数据库数据起作用的原因,但不适用于.Net比较适用的内存数据。

所以你需要在.Net中为你的缓存实现一个不区分重音的比较器,如this answer中所示。