Solução com interceptor de comando
É definitivamente possível, embora seja um pouco hack. Você pode alterar o comando CREATE DATABASE com um interceptor de comando. Il interceptará todos os comandos enviados ao banco de dados, reconhecerá o comando de criação do banco de dados com base em uma expressão regex e alterará o texto do comando com seu agrupamento.
Antes da criação do banco de dados
DbInterception.Add(new CreateDatabaseCollationInterceptor("SQL_Romanian_Cp1250_CI_AS_KI_WI"));
O interceptador
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) { }
}
Observações
Como o banco de dados é criado com o agrupamento correto desde o início, todas as colunas herdarão automaticamente esse agrupamento e você não precisará alterá-las posteriormente.
Esteja ciente de que isso afetará qualquer criação posterior de banco de dados que ocorra dentro do domínio do aplicativo. Portanto, você pode querer remover o interceptor depois que o banco de dados for criado.