درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من
تخفیف های وب سایت
همه تخفیف ها

عضویت در

کانال تلگرام

توسینسو

اطلاعات مطلب
مدرس/نویسنده
حسین احمدی
امتیاز: 215942
رتبه:3
344
265
416
2833
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ... پروفایل کاربر

آموزش استفاده از Entity Framework Code-First - بخش اول

تاریخ 90 ماه قبل
نظرات 5
بازدیدها 9031
يکي از مهمترين ابزار هايي که در نوشتن برنامه هاي 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<Product> 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<ProductCategory> ProductCategories { get; set; }
    public DbSet<Product> Products { get; set; }
}

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

<configuration>
    <connectionStrings>
        <add name="SalesContext" connectionString="cnnstring" provider="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

دقت کنيد که نام 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<ProductCategory>()
        .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 توضيحات بيشتري خواهم داد.

موفق و پيروز باشيد.
برچسب ها
ردیف عنوان
1 آموزش استفاده از Entity Framework Code-First - بخش اول
2 آموزش Entity Framework Code-First - آشنایی با کلاس های DbContext و DbSet
3 آموزش Entity Framework Code-First - تعریف Mapping با استفاده از Attribute ها
4 آموزش Entity Framework Code-First - تعریف Mapping با Fluent API
5 آموزش Entity Framework Code-First - تعریف رابطه ها (بخش اول)
6 آموزش Entity Framework Code-First - رابطه ها (بخش دوم)
دوره مجموعه کل دوره
مطالب مرتبط

در حال دریافت اطلاعات

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


  • سلام...قبل از اینکه بخوام نکته ای رو اشاره کنم جا داره از آقای مهندس حسین احمدی تشکر کنم که اینقدر ساده و روان به آموزش یکی از مباحث مهم برنامه نویسی asp.net یعنی EntityFramework اشاره کردن.
    اما نکته ای ک میخواستم بگم اینه که سه پاراگراف بالاتر اشاره شده که رابطه از نوع چند به چند است که اشتباه هست و بایستی اصلاح شود. زیرا رابطه بین این دو موجودیت از نوع one-to-many هست.
    باتشکر از سایت خوبتون
    ان شا الله که همیشه موفق باشید.
  • سلام، ممنون از تذکرتون، داخل متن اصلاح شد. :)
  • سلام و خسته نباشید خدمت شما بابت آموزش های مفیدتون.
    یه سوالی داشتم، بعد از نوشتن برنامه تحت Entity Framework، برای اجرای اون در یه سیستم دیگه چطور باید عمل کرد؟
    باید در سیستم دیگه هم Microsoft SQL Server رو نصب کرد و بانک اطلاعاتی رو ساخت تا اجرا بشه؟

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

    ممنون

برای ارسال نظر ابتدا به سایت وارد شوید