sql >> Database >  >> RDS >> Sqlserver

Databasesortering instellen in Entity Framework Code-First Initializer

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.



  1. Unicode-normalisatie in PostgreSQL 13

  2. Taal wijzigen van systeem- en foutmeldingen in PostgreSQL

  3. SQL Server Process Queue Race Conditie

  4. BEGIN - END blok atomaire transacties in PL/SQL