1

asp.net mvc Web サイトのアプリケーション開始ルーチンで、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 é

何故ですか ?エンティティをキャッシュするときにアクセントを区別しない動作を維持するにはどうすればよいですか?

4

1 に答える 1

1

照合は SQL Server の概念です。そのため、クエリはデータベース データでは機能しますが、.Net 比較が適用されるメモリ データでは機能しません。

したがって、この回答でスケッチされているように、.Net のキャッシュにアクセントを区別しない比較子を実装する必要があります。

于 2012-12-05T10:05:12.037 に答える