ضمن .NET 1.1، يمكن لذاكرة التخزين المؤقت فقط إنشاء تبعيات ذاكرة التخزين المؤقت بناءً على أنظمة الملفات والكائنات وما إلى ذلك، ولكن .NET 2.0 يوفر تبعية جديدة، SqlCacheDependency، والتي تسمح لذاكرة التخزين المؤقت الخاصة بنا بالاعتماد على التغييرات في قاعدة البيانات. على الرغم من أن هذا الأسلوب يبدو مشابهًا للحل البديل الموجود في الإصدار 1.1، إلا أن هناك اختلافًا أساسيًا بينهما (توفير كائن SqlCacheDependency). (الحل البديل للإصدار 1.1 هو إنشاء مشغل لجدول البيانات، ثم سيقوم المشغل بتعديل ملف محلي عند تشغيله. إن تبعية ذاكرة تخزين مؤقت معينة في النظام هي هذا الملف المحلي، وذلك لإخطار ذاكرة التخزين المؤقت بالتخزين المؤقت تغيرت البيانات)
يمكن استخدام SqlCacheDependency الخاص بـ .NET 2.0 في الإصدارات التالية لـ SqlServer2000. تقدم هذه المقالة كيفية استخدامه ضمن Sql Server 2000. يختلف Sql Server 2005 قليلاً.
أولاً، تحتاج إلى تثبيت إطار عمل .NET 2.0، وبالطبع يجب أن يكون Sql Server 2000 متاحًا. في .NET 2.0، توفر Microsoft أداة مساعدة: aspnet_regsql (في نفس الدليل مثل aspnet_regiis)، وهي أداة لسطر الأوامر ويمكن الحصول على معلمات سطر الأوامر من خلال aspnet_regsql -؟. نحن هنا نهتم بالمعلمات التالية: -ed يبدأ قاعدة البيانات لتبعيات ذاكرة التخزين المؤقت SQL، -E يستخدم بيانات اعتماد Windows الحالية للمصادقة، -d يستخدم لاسم قاعدة البيانات لخادم التطبيق، إذا لم يتم تحديد اسم قاعدة البيانات، الافتراضي يتم استخدام قاعدة البيانات "aspnetdb". سيتم استخدام منشورات قاعدة بيانات Microsoft النموذجية في هذه المقالة. ثم نحتاج إلى استخدام سطر الأوامر التالي لإنشاء قاعدة البيانات التابعة لذاكرة التخزين المؤقت:
aspnet_regsql -ed -E -d pubs
(ملاحظة: معلمات سطر الأوامر هنا حساسة لحالة الأحرف)
بعد تنفيذ هذا الأمر، يمكننا فتح قاعدة بيانات Pubs لمعرفة التغييرات التي حدثت. أولاً، يوجد جدول إضافي: AspNet_SqlCacheTablesForChangeNotification. يحتوي هذا الجدول على 3 حقول اسم الجدول، إشعار الإنشاء: وقت الإنشاء. ChangeId: رقم التغيير (الحقل التراكمي). يمكنك أيضًا أن ترى أن قاعدة البيانات تحتوي على العديد من الإجراءات المخزنة، وهي:
AspNet_SqlCacheRegisterTableStoredProcedure،
AspNet_SqlCacheUnRegisterTableStoredProcedure،
AspNet_SqlCacheUpdateChangeIdStoredProcedure،
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure،
AspNet_SqlCachePollingStoredProcedure
من السهل فهم هذه الإجراءات المخزنة حرفيًا، ويمكن الاطلاع على تفاصيل الإجراء المخزن بعد فتحها في محلل الاستعلام. من أجل مراقبة التغييرات في الجدول، نحتاج إلى تحديد الجدول الذي يحتاج إلى المراقبة عن طريق تنفيذ الإجراء المخزن AspNet_SqlCacheRegisterTableStoredProcedure، بالطبع، يمكن تحديده أيضًا من خلال الأداة المساعدة aspnet_regsql، ويكون سطر الأوامر كما يلي:
aspnet_regsql -et -E -d pubs -t Authors
بعد تنفيذ الأمر أعلاه، سيقوم aspnet_regsql بإنشاء مشغل للمؤلفين، وفيما يلي المشغل الذي قمت بإنشائه بعد تنفيذ الأمر:
قم بضبط QUOTED_IDENTIFIER على التشغيل
يذهب
قم بتشغيل ANSI_NULLS
يذهب
ALTER TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] تشغيل [المؤلفون]
للإدراج والتحديث والحذف كما البداية
قم بضبط NOCOUNT على
EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'authors'
نهاية
يذهب
قم بإيقاف تشغيل QUOTED_IDENTIFIER
يذهب
قم بتشغيل ANSI_NULLS
يذهب
كما يتبين من المشغل، سيتم تنفيذ الإجراء المخزن AspNet_SqlCacheUpdateChangeIdStoredProcedure عند إدراج جدول المؤلفين وحذفه وتحديثه. سيضيف هذا الإجراء المخزن سجلاً إلى جدول AspNet_SqlCacheTablesForChangeNotification. السجل هو كما يلي:
إشعار اسم الجدولتم إنشاء معرف التغيير
المؤلفون 2006-06-20 09:38:26.267 1
عند إجراء أي تعديلات على البيانات الموجودة في المؤلفين، سيتم تجميع معرف التغيير، ولن تتغير الحقول الأخرى.
فأنت بحاجة إلى إضافة بعض المحتوى في web.config ويمكنك استخدامه.
قم أولاً بإضافة سلسلة اتصال قاعدة البيانات:
<سلاسل الاتصال>
<add name="pubsConString" ConnectionString="server=localhost;database=pubs;uid=sa;pwd=mypassword;"/>
</connectionStrings>
ثانيًا أضف قسم ذاكرة التخزين المؤقت:
<system.web>
<التخزين المؤقت>
<sqlCacheDependency ممكّن = "صحيح">
<قواعد البيانات>
<إضافة اسم = "الناشرين" ConnectionStringName = "pubsConString" pollTime = "900"/>
</قواعد البيانات>
</sqlCacheDependency>
</التخزين المؤقت>
</system.web>
ما يلي هو رمز الاختبار، عند تحميل الصفحة، يتم تنفيذ التعليمات البرمجية التالية:
protected void Page_Load(object sender, EventArgs e) {.
إذا (HttpContext.Current.Cache["xxx"] == null) {
SqlCacheDependency d = new SqlCacheDependency("pubs"، "authors")؛// pubs هي الناشرون المحددون في قسم قواعد البيانات، متبوعًا باسم الجدول
HttpContext.Current.Cache.Insert("xxx"، "xxx"، d);
Response.Write("إنشاء قيمة ذاكرة تخزين مؤقت جديدة هو xxx.");
}
آخر{
Response.Write("تحميل البيانات من ذاكرة التخزين المؤقت، القيمة هي "+HttpContext.Current.Cache["xxx"].ToString());
}
}
عند فتح هذه الصفحة لأول مرة ستظهر:
إنشاء قيمة ذاكرة تخزين مؤقت جديدة هي xxx.
بعد تحديث الصفحة، يتم عرض:
تحميل البيانات من ذاكرة التخزين المؤقت، القيمة هي xxx.
عند استخدام محلل الاستعلام لتعديل البيانات في المؤلفين وتحديث الصفحة مرة أخرى، سيتم عرض:
قيمة إنشاء ذاكرة تخزين مؤقت جديدة هي xxx.
وهذا يوضح أن ذاكرة التخزين المؤقت تعمل بشكل طبيعي عندما يتغير جدول المؤلفين، ستصبح محتويات ذاكرة التخزين المؤقت غير صالحة تلقائيًا، وسيقوم تطبيقي أيضًا بإعادة إنشاء كائن ذاكرة التخزين المؤقت.
ملاحظة: يتكون SqlCacheDependency من منشئين، ويدعم SqlServer2000 معلمتين فقط، ومعلمة واحدة تدعم SqlServer2005.