إن BookDBContext Class الذي تم إنشائه في الدرس السابق مسؤول عن الاتصال بقاعدة البيانات و تحويل Book Objects لتكون سجلات في قاعدة البيانات.
أحد الأسئلة الهامة هنا، هو كيف ستيم تحديد قاعدة البيانات التي سنتصل بها؟
فعلياً لانحتاج لتحديد قاعدة البيانات التي نريد استخدامها لأن Entity Framework بشكل افتراضي ستستخدم قاعدة البيانات LocalDB، في هذه المقالة سوف نقوم بإضافة Connection String بشكل صريح الى ملف Web.config في مشروعنا.
هذه المقالة جزء من سلسلة لتعلم أساسيات ASP.NET MVC للمبتدئين:
- المقالة الأولى: أول موقع ويب لك باستخدام ASP.NET MVC
- المقالة الثانية: إضافة متحكمات Controllers لموقع ASP.NET MVC
- المقالة الثالثة: إضافة واجهة View لموقع ASP.NET MVC
- المقالة الرابعة: إضافة Model لموقع ASP.NET MVC
- المقالة الخامسة: إضافة Connection String والعمل مع قواعد البيانات LocalDB
- المقالة السادسة: الوصول إلى البيانات عن طريق المتحكم Controller
- المقالة السابعة: شرح وتجريب تابع التعديل Edit Method
- المقالة الثامنة: إضافة ميزة البحث إلى موقع ASP.NET MVC
- المقالة التاسعة: إضافة حقل جديد لقاعدة البيانات انطلاقاً من كود سي شارب Code First Method
- المقالة العاشرة: إضافة التحقق Validation إلى MVC Model وتطبيق مبدأ DRY
- المقالة الحادية عشر: اختبار وشرح توابع Details و Delete
ماهي قواعد البيانات SQL Server Express LocalDB؟
إن LocalDB هي نسخة مخففة من محرك قاعدة البيانات SQL Server Express، تعمل في نمط تشغيل خاص ل SQL Server Express و التي تمكننا من التعامل مع قواعد البيانات. إن ملفات قاعدة البيانات LocalDB مخزنة في مجلد App_Data للمشروع وهي غير مستحسنة للاستخدام في تطوير تطبيقات الويب لأنها ليست مصممة للعمل مع IIS.
ملاحظة: يمكن نقل قاعدة البيانات LocalDB إلى SQL Server أو SQL Azure.
في Visual Studio 2013 و Visual Studio 2012 يتم تنصيب LocalDB بشكل افتراضي مع Visual Studio، كما أن Entity Framework تقوم بشكل افتراضي بالبحث عن Connection Stringالتي لها نفس اسم context class وفي مثالنا ( BookDBContext Class) للمزيد من المعلومات في الرابط التالي:
SQL Server Connection Strings for ASP.NET Web Applications
إضافة الـ Connection String
في العودة لتطبيق الـ Connection String قم بفتح ملف Web.config الموجود في مجلد التطبيق ArabicArchive ( و ليس الملف Web.config الموجود في مجلد Views) كما هو موضح:
قم بإيجاد عنصر <connectionStrings> كما هو موضح:
قم بإضافة connection string التالية الى عنصر <connectionStrings> في ملف Web.config
<add name="BookDBContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Books.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
القسم التالي يعرض جزء من الملف Web.config الذي يحوي <connectionStrings>
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-ArabicArchive-20170610112706.mdf;Initial Catalog=aspnet-ArabicArchive-20170610112706;Integrated Security=True" providerName="System.Data.SqlClient" /> <add name="BookDBContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Books.mdf;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings>
إن أول connection string اسمها DefaultConnection وهي تستخدم من أجل قاعدة بيانات العضوية (تسجيل المستخدمين …الخ) للتحكم وتحديد من يستطيع الوصول للتطبيق و Connection String الثانية التي قمنا بإضافتها لتحديد قاعدة البيانات LocalDB واسمها Books.mdf، وهي موجودة في مجلد App_Data .
ملاحظة:ان اسم connection string يجب أن يطابق اسم DbContext class
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace ArabicArchive.Models
{
public class Book
{
public int Id { set; get; }
public string Title { set; get; }
public string Description { set; get; }
public DateTime PublishDate { set; get; }
public string Author { set; get; }
public int NumberOfPages { set; get; }
public double GoodreadsRate { set; get; }
public int TypeId { set; get; }
public virtual Type Type { set; get; }
}
public class Type
{
public int Id { set; get; }
public string Title { set; get; }
public string Description { set; get; }
public virtual ICollection<Book> Books { set; get; }
}
public class BookDBContext : DbContext
{
public DbSet<Book> Books { get; set; }
public DbSet<Type> Types { get; set; }
}
}
أنت عملياً لست بحاجة إلى إضافة الـ BookDBContext Connection String لأن Entity Framework ستضيف قاعدة بيانات LocalDB بنفس اسم DbContext class. (في مثالنا ArabicArchive.Models.BookDBContext) ويمكن تسمية قاعدة البيانات بأي اسم نريد مع الانتباه أن اللاحقة هي MDF.
في الدرس القادم سنقوم ببناء متحكم جديد لعرض الكتب وتمكين المستخدمين من إضافة كتب جديدة.
تغذية راجعة
اتمنى عدم التردد في الاستفسار عن أي مفهوم تم ذكره في هذا التدوينة، وأرجو تجربة إضافة الـ ConnectionString بشكل فعلي وعدم الاكتفاء بالقراءة لتحقيق أكبر فائدة ممكنة، وكالعادة سأكون سعيد إن شاركتموني تجربتكم وتصويباتكم في حال وجود أخطاء كتابية.
هذه المقالة مستندة إلى سلسلة دروس مايكروسوفت الرسمية للـ ASP.NET MVC، وذلك لترتيب الدروس المناسب واعتقادي بسلاستها وأهمية نقلها إلى العربية بأسلوب مناسب وتجربة تتوافق مع الأدوات المتاحة لنا والمتوفرة في منطقتنا.