एंटिटी फ्रेमवर्क - कमांड इंटरसेप्शन
एंटिटी फ्रेमवर्क 6.0 में, एक और नई सुविधा है, जिसे जाना जाता है Interceptorया अवरोधन। अवरोधन कोड की अवधारणा के आसपास बनाया गया हैinterception interfaces। उदाहरण के लिए, IDFCommandInterceptor इंटरफ़ेस ईएफ से पहले कॉल करने वाले तरीकों को परिभाषित करता है, ExecuteNonQuery, ExecuteScalar, ExecuteReader, और संबंधित विधियों को कॉल करता है।
एंटिटी फ्रेमवर्क इंटरसेप्शन का उपयोग करके वास्तव में चमक सकता है। इस दृष्टिकोण का उपयोग करते हुए आप अपने कोड को अनटाइड किए बिना बहुत अधिक जानकारी को क्षणिक रूप से पकड़ सकते हैं।
इसे लागू करने के लिए, आपको अपने स्वयं के कस्टम इंटरसेप्टर बनाने और तदनुसार पंजीकरण करने की आवश्यकता है।
एक बार एक वर्ग जो IDbCommandInterceptor इंटरफ़ेस को लागू करता है, उसे DbInterception वर्ग का उपयोग करके एंटिटी फ्रेमवर्क के साथ पंजीकृत किया जा सकता है।
IDbCommandInterceptor इंटरफ़ेस में छह विधियाँ हैं और आपको इन सभी विधियों को लागू करने की आवश्यकता है। इन विधियों का मूल कार्यान्वयन निम्नलिखित हैं।
आइए निम्नलिखित कोड पर एक नज़र डालें जिसमें IDbCommandInterceptor इंटरफ़ेस लागू किया गया है।
public class MyCommandInterceptor : IDbCommandInterceptor {
public static void Log(string comm, string message) {
Console.WriteLine("Intercepted: {0}, Command Text: {1} ", comm, message);
}
public void NonQueryExecuted(DbCommand command,
DbCommandInterceptionContext<int> interceptionContext) {
Log("NonQueryExecuted: ", command.CommandText);
}
public void NonQueryExecuting(DbCommand command,
DbCommandInterceptionContext<int> interceptionContext) {
Log("NonQueryExecuting: ", command.CommandText);
}
public void ReaderExecuted(DbCommand command,
DbCommandInterceptionContext<DbDataReader> interceptionContext) {
Log("ReaderExecuted: ", command.CommandText);
}
public void ReaderExecuting(DbCommand command,
DbCommandInterceptionContext<DbDataReader> interceptionContext) {
Log("ReaderExecuting: ", command.CommandText);
}
public void ScalarExecuted(DbCommand command,
DbCommandInterceptionContext<object> interceptionContext) {
Log("ScalarExecuted: ", command.CommandText);
}
public void ScalarExecuting(DbCommand command,
DbCommandInterceptionContext<object> interceptionContext) {
Log("ScalarExecuting: ", command.CommandText);
}
}
इंटरसेप्टर को पंजीकृत करना
एक बार एक वर्ग जो एक या अधिक अवरोधन इंटरफेस का निर्माण करता है, उसे DFInceptionception कक्षा का उपयोग करके EF के साथ पंजीकृत किया जा सकता है जैसा कि निम्नलिखित कोड में दिखाया गया है।
DbInterception.Add(new MyCommandInterceptor());
निम्न कोड में दिखाए गए अनुसार DbConfiguration code- आधारित कॉन्फ़िगरेशन का उपयोग करके इंटरसेप्टर को ऐप-डोमेन स्तर पर भी पंजीकृत किया जा सकता है।
public class MyDBConfiguration : DbConfiguration {
public MyDBConfiguration() {
DbInterception.Add(new MyCommandInterceptor());
}
}
आप कोड का उपयोग करके इंटरसेप्टर कॉन्फिगर फाइल को भी कॉन्फ़िगर कर सकते हैं -
<entityFramework>
<interceptors>
<interceptor type = "EFInterceptDemo.MyCommandInterceptor, EFInterceptDemo"/>
</interceptors>
</entityFramework>