sql >> Databasteknik >  >> RDS >> Sqlserver

Ställ in databassortering i Entity Framework Code-First Initializer

Lösning med en kommandointerceptor

Det är definitivt möjligt, även om det är lite av ett hack. Du kan ändra kommandot CREATE DATABASE med en kommandointerceptor. Jag kommer att fånga upp alla kommandon som skickas till databasen, känna igen kommandot för att skapa databasen baserat på ett regexuttryck och ändra kommandotexten med din sortering.

Innan databasen skapas

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

Interceptorn

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

Anmärkningar

Eftersom databasen skapas med rätt sortering från början kommer alla kolumner automatiskt att ärva den sorteringen och du behöver inte ÄNDRA dem efteråt.

Var medveten om att det kommer att påverka eventuellt senare databasskapande som sker inom applikationsdomänen. Så du kanske vill ta bort interceptorn efter att databasen har skapats.



  1. Hur väljer man kolumner från en tabell som har icke-nullvärden?

  2. Hur skapar jag en kommaseparerad lista med en SQL-fråga?

  3. Hur testar man om en MySQL-fråga lyckades ändra databastabelldata?

  4. Tar bort objekt från ListView och Database med OnItemClickListener