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

मैं एंटिटी फ्रेमवर्क में इंडेक्स संकेत कैसे निर्दिष्ट कर सकता हूं?

समाधान सरल है। आइए एक इंटरसेप्टर जोड़ें !!!

    public class HintInterceptor : DbCommandInterceptor
{
    private static readonly Regex _tableAliasRegex = new Regex(@"(?<tableAlias>AS \[Extent\d+\](?! WITH \(*HINT*\)))", RegexOptions.Multiline | RegexOptions.IgnoreCase);

    [ThreadStatic] public static string HintValue;

    public override void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        if (!String.IsNullOrWhiteSpace(HintValue))
        {
            command.CommandText = _tableAliasRegex.Replace(command.CommandText, "${tableAlias} WITH (*HINT*)");
            command.CommandText = command.CommandText.Replace("*HINT*", HintValue);
        }

        HintValue = String.Empty;
    }

    public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        if (!String.IsNullOrWhiteSpace(HintValue))
        {
            command.CommandText = _tableAliasRegex.Replace(command.CommandText, "${tableAlias} WITH (*HINT*)");
            command.CommandText = command.CommandText.Replace("*HINT*", HintValue);
        }

        HintValue = String.Empty;
    }
}

रेगेक्स बेहतर हो सकता है, मुझे पता है। आइए हमारे इंटरसेप्टर को कॉन्फिग क्लास में पंजीकृत करें

public class PbsContextConfig : DbConfiguration
{
    public PbsContextConfig()
    {
        this.AddInterceptor(new HintInterceptor());
    }
}

आइए DbSet के लिए अच्छा Hint एक्सटेंशन बनाएं

public static class HintExtension
{
    public static DbSet<T> WithHint<T>(this DbSet<T> set, string hint) where T : class
    {
        HintInterceptor.HintValue = hint;
        return set;
    }
}

कैसे उपयोग करें?

context.Persons.WithHint("INDEX(XI_DOWNTIME_LOCK)").Where( x => x.ID == ....

संशोधनों का स्वागत है!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में टेबल-वैल्यूड फंक्शन बनाएं

  2. SQL में न्यूनतम दो मान प्राप्त करना

  3. SQL सर्वर में किसी दिए गए कैरेक्टर के लिए यूनिकोड मान कैसे लौटाएं - UNICODE ()

  4. संलग्न .mdf डेटाबेस का उपयोग करने के लिए Web.config में DB कनेक्शन स्ट्रिंग काम नहीं करेगी

  5. आप TSQL का उपयोग करके डेटाबेस में सभी तालिकाओं को कैसे काटते हैं?