Oplossing met een commando-interceptor
Het is zeker mogelijk, hoewel het een beetje een hack is. U kunt de opdracht CREATE DATABASE wijzigen met een opdrachtinterceptor. Il zal alle commando's die naar de database worden verzonden onderscheppen, het commando voor het maken van de database herkennen op basis van een regex-expressie en de commandotekst wijzigen met uw sortering.
Vóór het maken van de database
DbInterception.Add(new CreateDatabaseCollationInterceptor("SQL_Romanian_Cp1250_CI_AS_KI_WI"));
De interceptor
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) { }
}
Opmerkingen
Aangezien de database vanaf het begin met de juiste sortering is gemaakt, nemen alle kolommen automatisch die sortering over en hoeft u ze daarna niet te VERANDEREN.
Houd er rekening mee dat dit van invloed is op het later maken van een database binnen het toepassingsdomein. Dus misschien wilt u de interceptor verwijderen nadat de database is gemaakt.