في هذه المقالة سوف نقوم بإضافة الـ classes لإدارة الكتب في قاعدة البيانات وهذه ال classes ستكون جزء الـ Model في تطبيق ASP.NET MVC، والـ Model كما عرفناه سابقاً: هو كلاسات Classes تمثل البيانات التي سيستخدمها الموقع.
سنستخدم تقنية تقدمها NET. للوصول الى البيانات، اسمها “Entity Framework” من أجل بناء وعمل Model classes.
هذه المقالة جزء من سلسلة لتعلم أساسيات 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
إن Entity Framework تدعم نموذج تطويري يدعى “Code First“، وهي تقنية تسمح لنا بإضافة Model objects من خلال كتابة classes والتي تعرف أيضا باسم POCO Classes وبعد ذلك يتم توليد قاعدة بيانات بجداولها وعلاقاتها انطلاقاً من هذه ال classes اوتوماتيكياً.
إضافة Model classes
في Solution Explorer قم بالنقر بزر الفأرة اليميني على المجلد Models ثم اختر Add ثم اختر Class
قم بإدخال اسم ال Book” :class”
قم بإضافة الخصائص التالية إلى Book class
using System;
using System.Collections.Generic;
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; }
}
قم أيضا في نفس الملف بإضافة Type class (بإمكانك في ملف جديد أيضاً)، وقم في هذا ال 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 class Type
{
public int Id { set; get; }
public string Title { set; get; }
public string Description { set; get; }
}
}
سوف نستخدم هذه الـ classes لتمثيل الكتب وأنواعها في قاعدة البيانات.
حيث أن كل instance من Book class سيكون عبارة عن سجل في جدول Book في قاعدة البيانات وكل خاصية في Book class ستكون عامود في الجدول.
لاستخدام System.Data.Entity وال Classes المرتبطة بها نحتاج لتنصيب EntityFramework
تنصيب Entity Framework
في solution Explorer قم بالنقر بزرالفأرة اليميني على اسم المشروع، قم باختيار Manage NuGet Packages كما هو موضح بالصورة التالية:
سيتم فتح النافذة التالية:
في هذه النافذة قم باختيار “EntityFramework” من القسم اليساري للنافذة أو قم بالكتابة في مربع البحث: “EntityFramework”
قم باختيار أحدث نسخة وقم بالضغط على زر Install فتظهر النافذة التالية:
قم بالضغط على زر OK للمتابعة.
بعد ذلك تظهر نافذة من أجل الموافقة على شروط الترخيص، قم بالنقر على I Accept للمتابعة.
وبعدها يبدأ تثبيت EntityFramework
عند انتهاء التثبيت ستظهر رسالة توضح نجاح التثبيت في نافذة Output كما هو موضح بالصورة التالية
في ملف Book.cs قم بإضافة الخاصية التالية الى Book Class
public virtual Type Type { set; get; }
إن هذه الخاصية هي عبارة عن reference الى object من النوع type، تستخدم هذه الخاصية لتسهيل عملية تحديد النوع لكل كتاب.
قم بإضافة الخاصية التالية الى Type Class:
public virtual ICollection<Book> Books { set; get; }
إن هذه الخاصية هي عبارة عن لائحة بجميع الكتب التي تنتمي لنوع معين من الكتب، باستخدام هذه الخاصية نستطيع معرفة كل الكتب التي تنتمي لنوع معين.
في نفس الملف قم بإضافة BookDBContext 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 class يمثل الجزء المسؤول عن التعامل مع قاعدة بيانات الكتب فهو يقوم بتخزين و جلب وتحديث Book class instances و Type class instances في قاعدة البيانات.
نلاحظ أن BookDBContext class يرث من DbContext class وهذا ال class موجود في تقنية Entity Framework. من أجل أن نستطيع التعامل مع DbContext و DbSet نحتاج لإضافة العبارة using في أول الملف:
using System.Data.Entity;
يمكن ايضا القيام بذلك من خلال النقر بزر الفأرة اليميني على الخطوط الحمراء المتعرجة والنقر على
;using System.Data.Entity
ملاحظة: هناك العديد من عبارات using الغير مستخدمة يفضل أن نقوم بإزالتها، يمكننا القيام بذلك من خلال النقر على الملف بزر الفأرة الأيمن ثم النقر على Organize Usings ثم النقر على Remove Unused Usings
في هذا الدرس قمنا بإضافة الـ Models أي قمنا بتمثيل البيانات التي نحتاجها لمشروعنا في مجموعة Classes، وفي الدرس القادم سنقوم بتعلم كيفية إنشاء اتصال مع سيرفر قواعد البيانات وذلك لتوليد قاعدة بيانات من ال Models الذي قمنا بإضافتها.
تغذية راجعة
اتمنى عدم التردد في الاستفسار عن أي مفهوم تم ذكره في هذا التدوينة، وأرجو تجربة إضافة الـ Models بشكل فعلي وعدم الاكتفاء بالقراءة لتحقيق أكبر فائدة ممكنة، وكالعادة سأكون سعيد إن شاركتموني تجربتكم وتصويباتكم في حال وجود أخطاء كتابية.
هذه المقالة مستندة إلى سلسلة دروس مايكروسوفت الرسمية للـ ASP.NET MVC، وذلك لترتيب الدروس المناسب واعتقادي بسلاستها وأهمية نقلها إلى العربية بأسلوب مناسب وتجربة تتوافق مع الأدوات المتاحة لنا والمتوفرة في منطقتنا.