Řazení dat v SQL serveru podle kultury   otázka

SQL, Entity Framework, Databáze

Narazil jsem na zajímavý problém, který zatím neumím řešit.

Pokud děláme multiple language aplikaci, tak by bylo vhodné, měnit řazení dat podle nastavené kultury CurrentCulture. Aby se například znak 'Ch' Angličanovi zařadil jako 'C' atd.

Pokud je řazení v kódu .NET tak se toto děje automaticky, ale pokud jde o řazení v SQL Serveru, tak zde se řadí podle Collation nastavené v databázi, případně u sloupce.

Protože neexistuje nic jako "nastavit collation pro connection", je nutné collaction změnit přímo v dotaze např. takto:

SELECT *
  FROM Osoba
 ORDER BY Prijmeni Collate Czech_CI_AS_WS

SELECT *
  FROM Osoba
 ORDER BY Prijmeni Collate SQL_Latin1_General_CP1_CI_AS

To má nevýhodu dále v tom, že Collate nejde naplnit z proměnné.

Uměl bych si představit, že např. ve Stored Procedure sestavíme dotaz, doplníme k němu ORDER BY s Collate, kterou získáme podle nějaké převodní tabulky z Kultury, a celý dotaz spustíme přes sp_executesql.

Jak toto ale řešit v aplikaci, která je postavená nad Entity Frameworkem?

Tam asi nemáme šanci změnit ORDER BY ve vygenerovaném dotazu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

S EF moc neumím, ale od nějaké verze by tam měl být nějaký Interceptor, kterým se dají ty dotazy měnit.

Pomocí IDbCommandTreeInterceptor by měl jít měnit nějaký strom. To je asi to co chcete, jestli ten strom umí collate, nebo se to dá do něj dohackovat. Pak můžete použít IDbCommandInterceptor který vám dá přístup ke stringu.

Doufám, že vám to pomůže.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback