Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Ustaw sortowanie bazy danych w inicjatorze Code-First Entity Framework

Rozwiązanie z przechwytywaczem poleceń

Jest to na pewno możliwe, choć to trochę hack. Komendę CREATE DATABASE można zmienić za pomocą przechwytywacza komend. Przechwyci wszystkie polecenia wysłane do bazy danych, rozpozna polecenie tworzenia bazy danych na podstawie wyrażenia regularnego i zmieni tekst polecenia za pomocą sortowania.

Przed utworzeniem bazy danych

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

Przechwytywacz

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

Uwagi

Ponieważ baza danych jest tworzona z prawidłowym sortowaniem od samego początku, wszystkie kolumny automatycznie odziedziczą to sortowanie i nie trzeba ich później ZMIENIAĆ.

Należy pamiętać, że wpłynie to na późniejsze tworzenie bazy danych w domenie aplikacji. Więc możesz chcieć usunąć przechwytywacz po utworzeniu bazy danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekazywanie listy<> do procedury składowanej SQL

  2. Tabela przestawna i konkatenacja kolumn

  3. Podziel ciąg znaków oddzielonych przecinkami i wstaw do tabeli (int)

  4. SQL Server - zatrzymaj lub przerwij wykonywanie skryptu SQL

  5. Driver.getConnection zawiesza się przy użyciu sterownika SQLServer i Javy 1.6.0_29