إضافة Connection String والعمل مع قواعد البيانات LocalDB

إن BookDBContext Class الذي تم إنشائه في الدرس السابق مسؤول عن الاتصال بقاعدة البيانات و تحويل Book Objects لتكون سجلات في قاعدة البيانات.

أحد الأسئلة الهامة هنا، هو كيف ستيم تحديد قاعدة البيانات التي سنتصل بها؟

فعلياً لانحتاج لتحديد قاعدة البيانات التي نريد استخدامها لأن  Entity Framework بشكل افتراضي ستستخدم قاعدة البيانات  LocalDB، في هذه المقالة سوف نقوم بإضافة Connection String بشكل صريح الى ملف Web.config في مشروعنا.

هذه المقالة جزء من سلسلة لتعلم أساسيات ASP.NET MVC للمبتدئين:

ماهي قواعد البيانات 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، وذلك لترتيب الدروس المناسب واعتقادي بسلاستها وأهمية نقلها إلى العربية بأسلوب مناسب وتجربة تتوافق مع الأدوات المتاحة لنا والمتوفرة في منطقتنا.

مدير تقني وشريك مؤسس لـ فسيلة تِك، مبرمج متعدد المهارات، مهتم في إنجاز أمور استثنائية في مجال التكنولوجيا وأعمل جاهداً لترك أثر إيجابي في الحياة