Løsning med en kommandointerceptor
Det er bestemt muligt, selvom det er lidt af et hack. Du kan ændre CREATE DATABASE-kommandoen med en kommandointerceptor. Jeg vil opsnappe alle kommandoer sendt til databasen, genkende kommandoen til oprettelse af database baseret på et regex-udtryk og ændre kommandoteksten med din sortering.
Før databasen oprettes
DbInterception.Add(new CreateDatabaseCollationInterceptor("SQL_Romanian_Cp1250_CI_AS_KI_WI"));
Interceptoren
public class CreateDatabaseCollationInterceptor : IDbCommandInterceptor
{
private readonly string _collation;
public CreateDatabaseCollationInterceptor(string collation)
{
_collation = collation;
}
public void NonQueryExecuted(DbCommand command, DbCommandInterceptionContext<int> interceptionContext) { }
public void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
{
// Works for SQL Server
if (Regex.IsMatch(command.CommandText, @"^create database \[.*]$"))
{
command.CommandText += " COLLATE " + _collation;
}
}
public void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext) { }
public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext) { }
public void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext) { }
public void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext) { }
}
Bemærkninger
Da databasen er oprettet med den rigtige sortering fra starten, vil alle kolonnerne automatisk arve den sortering, og du behøver ikke at ÆNDRE dem bagefter.
Vær opmærksom på, at det vil påvirke enhver senere oprettelse af databaser inden for applikationsdomænet. Så du vil måske fjerne interceptoren efter databasen er oprettet.