Решение с прехващач на команди
Определено е възможно, макар че е малко хак. Можете да промените командата CREATE DATABASE с прехващач на команди. Ще прихвана всички команди, изпратени до базата данни, ще разпознае командата за създаване на база данни въз основа на израз на регулярни изрази и ще променя текста на командата с вашето съпоставяне.
Преди създаването на база данни
DbInterception.Add(new CreateDatabaseCollationInterceptor("SQL_Romanian_Cp1250_CI_AS_KI_WI"));
Прехващачът
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) { }
}
Забележки
Тъй като базата данни е създадена с правилното съпоставяне от самото начало, всички колони автоматично ще наследят това съпоставяне и не е нужно да ги ПРОМЕНЯТЕ след това.
Имайте предвид, че това ще повлияе на всяко по-късно създаване на база данни, което се случва в домейна на приложението. Така че може да искате да премахнете прехващача след създаването на базата данни.