در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش Entity Framework قسمت 1 : معرفی و شروع به کار

يکي از مهمترين ابزار هايي که در نوشتن برنامه هاي Data-Centric استفاده ميشه، ابزار هاي ORM يا Object Relational Mapping هست. اين ابزار ها اين قابليت رو به شما ميدهند که داخل برنامه از بانک اطلاعاتي و جداول داخل اون به صورت Object ها استفاده کنيد. ابزار هاي زيادي در اين مورد وجود دارند که معروف ترين اون ها عبارتند از NHibernate و Entity Framework. در اين مقاله قصد دارم تا در مورد ويژگي Code-First در Entity Framework بنويسم.براي استفاده از اين مقاله ابزار هاي زير مورد نياز هستند:


  1. Microsoft Visual Studio
  2. Microsoft SQL Server

براي شروع ابتدا Script زير رو داخل Sql Server اجرا کنيد:

CREATE DATABASE Sales;
GO
CREATE TABLE Sales..ProductCategories
(
    ID INT NOT NULL IDENTITY PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL
);
GO
CREATE TABLE Sales..Products
(
    ID INT NOT NULL IDENTITY PRIMARY KEY,
    CategoryID INT NOT NULL REFERENCES Sales..ProductCategories(ID),
    Name NVARCHAR(100) NOT NULL
);
GO


بعد از اجراي Script بالا، پروژه اي داخل Visual Studio ايجاد کرده و سپس به EntityFramework يک Reference بدهيد. (براي استفاده از EntityFramework Code First مي تونيد دستور Install-Package EntityFramewokr را که يک دستور NuGet هست اجرا کنيد)

حالا بايد داخل پروژه جداول بانک رو به يک سري کلاس Map کنيم. براي اين کار ابتدا کلاس هاي زير را ايجاد کنيد:

public class ProductCategory
{
    public int ID { get; set }
    public string Name { get; set; }
    public virtual ICollection Products { get; set; }
}

public class Product
{
    public int ID { get; set; }
    public ProductCategory Category { get; set; }
    public int CategoryID { get; set; }
    public string Name { get; set; }
}

public class SalesContext : DbContext
{
    public DbSet ProductCategories { get; set; }
    public DbSet Products { get; set; }
}

همانطور که مشاهده مي کنيد، ما سه کلاس ايجاد کرديم، کلاس هاي ProductCategory، Prduct و SalesContext. دو کلاس اول که کلاس هاي عادي هستند، کلاس آخري يعني SalesContext کار اصلي رو براي ما انجام ميده. يعني وظيفه ارتباط بين کلاس ها و جداول بانک اطلاعاتي رو به عهده خواهد داشت. داخل کلاس Context ما دو Property ايجاد کرديم. اين Property ها در حقيقت همون جداول ما هستند. حال بايد Connection String بانک رو براي کلاس Context تعريف کنيم. براي اين کار فايل app.config را باز کرده و به صورت زير تغيير مي دهيم: 



    
        
    

دقت کنيد که نام ConnectionString بايد با نام Context يکي باشد. کل کاري که بايد انجام مي داديم همين بود، حالا مي تونيم از اين کلاس ها داخل برنامه استفاده کنيم. براي مثال، براي اضافه کردن يک ProductCategory بايد به صورت زير عمل کنيم:

SalesContext context = new SalesContext();
context.ProductCategories.Add(new ProductCategory() { Name = "Category1" });
context.SaveChanges(); 

با اين کار يک Product Category جديد به بانک ما اضافه خواهد شد.

حالا فرض کنيد که مي خواهيم به يک Category يک Product اضافه کنيم، براي اين کار يک سري تغييرات بايد انجام شود. کلاس DbContext يک Virtual Method دارد با نام OnModelCreating که با Override کردن اين متد مي توان عمليات Custom Mapping را انجام داد. در اينجا براي شناساندن Relation بين ProductCategory و Product بايد کد زير را در کلاس SalesContext اضافه کرد:

public override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        .HasMany(category => category.Products)
        .WithRequired(product => product.Category)
        .WithForeignKey(product => product.CategoryID);
}

با اين کار به کلاس SalesContext مي فهمانيم که کلاس ProductCategory چندين Product دارد که خود Product يک عدد Category داد که بايد حتما" وارد شود که رابطه بين اين دو با کليد خارجي CategoryID مشخص مي شود. (دقت کنيد که در اينجا رابطه ما **-1 يا همان یک به چند است). حالا با اجراي قطعه کد زير مي توان به يک Category يک Product جديد اضافه کرد:

SalesContext context = new SalesContext();
var category = context.ProductCategories.Find(1);
category.Products.Add(new Product() { Name = "Product1" });
context.SaveChanges();

دقت کنيد که داخل کلاس ProductCategory، ليست Products بايد از نوع virtual تعريف شود تا Entity Framework بتواند ليست Product ها را هنگام خواندن Category بارگذاري کند.در قسمت بعدي در مورد نحوه نوشتن کوئري ها و همچنين استفاده از Fluent Api توضيحات بيشتري خواهم داد.


موفق و پيروز باشيد.
#آموزش_سی_شارپ #ایجاد_جدول_با_entity_framwork #entity_framework_چیست؟ #آموزش_entity_framework_code_first #اموزش_برنامه_نویسی_entity_framework #برنامه_نویسی_پایگاه_داده #آموزش_entity_framework #ارتباط_با_بانک_اطلاعاتی_در_c#
عنوان
1 آموزش Entity Framework قسمت 1 : معرفی و شروع به کار رایگان
2 آموزش Entity Framework قسمت 2 : کلاسهای DbContext و DbSet رایگان
3 آموزش Entity Framework قسمت 3 : تعریف Mapping با Attribute ها رایگان
4 آموزش Entity Framework قسمت 4 : تعریف Mapping با Fluent API رایگان
5 آموزش Entity Framework قسمت 5 : تعریف رابطه ها بخش 1 رایگان
6 آموزش Entity Framework قسمت 6 : تعریف رابطه ها بخش 2 رایگان
زمان و قیمت کل 0″ 0
11 نظر
محمد غیوری خواه

سلام. جناب مهندس واقعا ممنونم که این آموزش رو اینقد سلیس و روان توضیح دادید. همه آموزش Entity رو مطالعه کردم و از درک بالای شما به برنامه نویسی پی بردم. منابع زیادی رو مطالعه کرده بودم ولی اصلا متوجه نمیشدم. کسی میتونه خوب بفهمونه که خودشم کاملا فهمیده باشه. امیدوارم در این اوضاع نابسامان حوضه آی تی موفق باشید. خدا به داد ما تازه واردا برسه :)

asadira

عالی بود، خیلی تشکر مهندس.

🔗

amindeist

سلام...قبل از اینکه بخوام نکته ای رو اشاره کنم جا داره از آقای مهندس حسین احمدی تشکر کنم که اینقدر ساده و روان به آموزش یکی از مباحث مهم برنامه نویسی asp.net یعنی EntityFramework اشاره کردن.

اما نکته ای ک میخواستم بگم اینه که سه پاراگراف بالاتر اشاره شده که رابطه از نوع چند به چند است که اشتباه هست و بایستی اصلاح شود. زیرا رابطه بین این دو موجودیت از نوع one-to-many هست.

باتشکر از سایت خوبتون

ان شا الله که همیشه موفق باشید.

حسین احمدی

سلام، ممنون از تذکرتون، داخل متن اصلاح شد. :)

StudioX

سلام و خسته نباشید خدمت شما بابت آموزش های مفیدتون.

یه سوالی داشتم، بعد از نوشتن برنامه تحت Entity Framework، برای اجرای اون در یه سیستم دیگه چطور باید عمل کرد؟

باید در سیستم دیگه هم Microsoft SQL Server رو نصب کرد و بانک اطلاعاتی رو ساخت تا اجرا بشه؟

اگه بخوایم نرم افزار رو در قالب یه فایل آماده به اجرا در سیستم دیگه کار کنه، کمترین بسته موردنیاز برای اجرای اون و تعریف بانک اطلاعاتی که خودمون در SQL Server ساختیم چیه؟ ساده تر بگم، چطور دیتابیس موجود برای برنامه بدون دردسر اجرا بشه

ممنون

شهاب اورعی

استاد گرامی با عرض خسته نباشید، code view سوم در پست (کانکشن استرینگ) هیچ محتوایی را نمایش نمی دهد


حسین احمدی

سلام، وقت بخیر

ممنون از اطلاع رسانیتون، اصلاح شد.

شهاب اورعی

تشکر بسیار از این سرعت عمل بالای شما!
مدتی هست به دنبال آموزش asp.net mvc core هستم متاسفانه در وب سایت قرار ندارد
همچنین جای خالی EF code first احساس میشه خیلی باعث مسرت خواهد بود یادگیری این مطالب با تدریس جنابتان

حسین احمدی

در مورد ASP.NET Core، منتظر ارائه نسخه 3 هستم، چون با توجه به نسخه هایی که ارائه شده، نسخه 3 به یک نقطه Stable میرسه و میشه آموزشش رو تهیه کرد، البته نسخه فعلی هم کاربردی هست، اما ارزشش رو داره تا نسخه 3 صبر کنیم. تو زمان ارائه نسخه 3 دوره آموزشی ASP.NET MVC هم تموم میشه.

رضا شاه حسینی

سلام و وقت بخیر خدمت استاد گرامی

ممنون می‌شم اگه یه کتاب خوب برای یادگیری EntityFramework معرفی بفرمایید.

سپاس از شما.

حسین احمدی

سلام، وقت بخیر

می تونید از کتاب Pro Entity Framework از انتشارات Apress استفاده کنید.

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....