Rozwiązanie z przechwytywaczem poleceń
Jest to na pewno możliwe, choć to trochę hack. Komendę CREATE DATABASE można zmienić za pomocą przechwytywacza komend. Przechwyci wszystkie polecenia wysłane do bazy danych, rozpozna polecenie tworzenia bazy danych na podstawie wyrażenia regularnego i zmieni tekst polecenia za pomocą sortowania.
Przed utworzeniem bazy danych
DbInterception.Add(new CreateDatabaseCollationInterceptor("SQL_Romanian_Cp1250_CI_AS_KI_WI"));
Przechwytywacz
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) { }
}
Uwagi
Ponieważ baza danych jest tworzona z prawidłowym sortowaniem od samego początku, wszystkie kolumny automatycznie odziedziczą to sortowanie i nie trzeba ich później ZMIENIAĆ.
Należy pamiętać, że wpłynie to na późniejsze tworzenie bazy danych w domenie aplikacji. Więc możesz chcieć usunąć przechwytywacz po utworzeniu bazy danych.