Soluzione con un intercettore di comandi
È sicuramente possibile, anche se è un po' un trucco. È possibile modificare il comando CREATE DATABASE con un intercettatore di comandi. Intercetterà tutti i comandi inviati al database, riconoscerà il comando di creazione del database in base a un'espressione regolare e modificherà il testo del comando con le tue regole di confronto.
Prima della creazione del database
DbInterception.Add(new CreateDatabaseCollationInterceptor("SQL_Romanian_Cp1250_CI_AS_KI_WI"));
L'intercettore
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) { }
}
Osservazioni
Poiché il database viene creato con le regole di confronto corrette dall'inizio, tutte le colonne erediteranno automaticamente quelle regole di confronto e non dovrai modificarle in seguito.
Tieni presente che influirà sulla successiva creazione di database che si verificherà all'interno del dominio dell'applicazione. Quindi potresti voler rimuovere l'intercettore dopo aver creato il database.