sql >> Databáze >  >> RDS >> Sqlserver

Nastavte řazení databází v Entity Framework Code-First Initializer

Řešení s příkazovým interceptorem

Určitě je to možné, i když je to trochu hack. Příkaz CREATE DATABASE můžete změnit pomocí zachycovače příkazů. Zachytí všechny příkazy odeslané do databáze, rozpozná příkaz k vytvoření databáze na základě výrazu regulárního výrazu a změní text příkazu s vaším řazením.

Před vytvořením databáze

DbInterception.Add(new CreateDatabaseCollationInterceptor("SQL_Romanian_Cp1250_CI_AS_KI_WI"));

Zachycovač

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) { }
}

Poznámky

Vzhledem k tomu, že databáze je od začátku vytvořena se správným řazením, všechny sloupce toto řazení automaticky zdědí a nemusíte je poté MĚNIT.

Uvědomte si, že to ovlivní jakékoli pozdější vytvoření databáze uvnitř aplikační domény. Takže možná budete chtít odstranit interceptor po vytvoření databáze.



  1. Přidat přihlášení k propojenému serveru na SQL Server (příklad T-SQL)

  2. SQL Server rozdělil CSV do více řádků

  3. Nelze ověřit, s možností novalidate

  4. Jak mohu získat součet více hodnot datetime?