sql >> Database teknologi >  >> RDS >> Sqlserver

Indstil databasesortering i Entity Framework Code-First Initializer

Løsning med en kommandointerceptor

Det er bestemt muligt, selvom det er lidt af et hack. Du kan ændre CREATE DATABASE-kommandoen med en kommandointerceptor. Jeg vil opsnappe alle kommandoer sendt til databasen, genkende kommandoen til oprettelse af database baseret på et regex-udtryk og ændre kommandoteksten med din sortering.

Før databasen oprettes

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

Interceptoren

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

Bemærkninger

Da databasen er oprettet med den rigtige sortering fra starten, vil alle kolonnerne automatisk arve den sortering, og du behøver ikke at ÆNDRE dem bagefter.

Vær opmærksom på, at det vil påvirke enhver senere oprettelse af databaser inden for applikationsdomænet. Så du vil måske fjerne interceptoren efter databasen er oprettet.



  1. Sådan beregnes forskellen mellem to tidsstempler i SQLite

  2. Forbind iPhone-appen til PostgreSQL ved hjælp af Libpq

  3. Hvordan opretter man et indeks på datodelen af ​​DATETIME-feltet i MySql

  4. En ekspertvejledning til Slony-replikering til PostgreSQL