Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एंटिटी फ्रेमवर्क कोड-फर्स्ट इनिशियलाइज़र में डेटाबेस संयोजन सेट करें

कमांड इंटरसेप्टर के साथ समाधान

यह निश्चित रूप से संभव है, हालांकि यह थोड़ा सा हैक है। आप कमांड इंटरसेप्टर के साथ CREATE DATABASE कमांड को बदल सकते हैं। Il डेटाबेस को भेजे गए सभी कमांड को इंटरसेप्ट करेगा, रेगेक्स एक्सप्रेशन के आधार पर डेटाबेस क्रिएशन कमांड को पहचानेगा, और कमांड टेक्स्ट को आपके कॉलेशन के साथ बदल देगा।

डेटाबेस बनाने से पहले

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

इंटरसेप्टर

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

टिप्पणियां

चूंकि डेटाबेस शुरू से ही सही संयोजन के साथ बनाया गया है, सभी कॉलम स्वचालित रूप से उस संयोजन को प्राप्त कर लेंगे और आपको बाद में उन्हें बदलना नहीं पड़ेगा।

ध्यान रखें कि यह एप्लिकेशन डोमेन के अंदर होने वाले किसी भी बाद के डेटाबेस निर्माण को प्रभावित करेगा। इसलिए हो सकता है कि आप डेटाबेस बनने के बाद इंटरसेप्टर को हटाना चाहें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कौन सा तेज COALESCE या ISNULL है?

  2. SQL सर्वर में टेबल नाम dbo से क्यों शुरू होते हैं?

  3. कार्य बनाम संग्रहीत कार्यविधियाँ

  4. UPDLOCK, होल्डलॉक के बारे में उलझन में

  5. मैं अपने सी # कोड से SQL सर्वर संग्रहीत प्रो में कैसे कदम उठा सकता हूं?