Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đặt đối chiếu cơ sở dữ liệu trong Entity Framework Code-First Initializer

Giải pháp với bộ đánh chặn lệnh

Nó chắc chắn là có thể, mặc dù nó có một chút hack. Bạn có thể thay đổi lệnh TẠO CƠ SỞ DỮ LIỆU bằng một bộ chặn lệnh. Il sẽ chặn tất cả các lệnh được gửi đến cơ sở dữ liệu, nhận dạng lệnh tạo cơ sở dữ liệu dựa trên biểu thức regex và thay đổi văn bản lệnh với đối chiếu của bạn.

Trước khi tạo cơ sở dữ liệu

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

Máy đánh chặn

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

Nhận xét

Vì cơ sở dữ liệu được tạo với đối chiếu phù hợp ngay từ đầu, nên tất cả các cột sẽ tự động kế thừa đối chiếu đó và bạn sẽ không phải thay đổi chúng sau đó.

Hãy lưu ý rằng nó sẽ ảnh hưởng đến bất kỳ quá trình tạo cơ sở dữ liệu nào sau này xảy ra bên trong miền ứng dụng. Vì vậy, bạn có thể muốn loại bỏ trình đánh chặn sau khi cơ sở dữ liệu được tạo.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buộc hết thời gian chờ truy vấn trong SQL Server

  2. SQL Server có thể gửi một yêu cầu web không?

  3. MSDTC trên máy chủ 'máy chủ không khả dụng'

  4. Cách thay đổi kiểu dữ liệu của cột trong SQL Server (T-SQL)

  5. Giúp hiệu suất SQL Server dễ dàng