در این پست از وبسایت پرووید در رابطه با درج داده در دیتابیس با استفاده از EF Core در روش Disconnected Scenario #1 صحبت خواهیم کرد. تکنولوژی Entity Framework Core نسل بعدی Entity Framework است که توسط مایکروسافت معرفی شده است.

در این آموزش از وبسایت پرووید در رابطه با ذخیره کرده داده ها در Entity Framework Core در disconnected scenario صحبت خواهیم کرد. در یکی دیگر از آموزش های قبلی وبسایت پرووید در رابطه با ذخیره کردن داده ها در Entity Framework Core و در connected scenario صحبت کردیم. در همین قسمت از این آموزش پیشنهاد می کنیم از بسته ی آموزش ویدئویی Entity Framework Core وبسایت پرووید دیدن کنید.

بسته ی آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری دیدن کنید.

بگذارید در ابتدا در رابطه با تفاوت connected scenario و disconnected scenario صحبت کنیم. تفاوت اصلی این دو روش کار کردن در Entity Framework Core در این است که در connected scenario یک شی یکسان از کلاس context برای خواندان داده ها از دیتابیس و ذخیره کردن آنها بر روی دیتابیس استفاده می شود. در حالی که در disconnected scenario شی context ای که با استفاده از آن اشیا را از دیتابیس می خوانیم با شی context ای که با آن داده ها را بر روی دیتابیس ذخیره می کنیم متفاوت است. بدون شک کاملاً واضح است که کار کردن با Entity Framework Core در disconnected scenario به مراتب سخت تر از و پیچیده تر از کار کردن در connected scenario است.

بسته ی آموزش ویدئویی معماری نرم افزار در Entity Framework Core

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی معماری نرم افزار در Entity Framework Core دیدن کنید.

در disconnected scenario اتفاقی که می افتد این است که کلاس context از entity هایی که در حافظه وجود دارند اطلاعی ندارد چرا که همه چیز به صورت disoconnected کار می کند. در واقع اگر بخواهیم که عملیات مناسب CUD یا همان Create، Update و Delete بر روی entity ها در زمان صدا زدن SaveChanges اعمال شود باید entity های disconnected را به context اصطلاحاً attach کنیم و EntityState مناسبی برای آنها در نظر بگیریم. در رابطه با این مباحث در بسته ی آموزش ویدئویی Entity Framework 6 از وبسایت پرووید کاملاً صحبت کرده ایم. علاوه بر این، توصیه می کنیم که از بسته ی آموزش ویدئویی 5 Entity Framework وبسایت پرووید دیدن کنید.

تصویر زیر انجام عملیات CUD در Entity framework Core در disconnected scenario را نشان می دهد.

همانطور که در تصویر زیر نشان داده شده است در disconnected scenario باید entity هایی که توسط context اصطلاحاً track نمی شوند (یعنی disconnected هستند) به کلاس context اصطلاحاً attach شوند. این کار با تنظیم کردین EntityState هر کدام از entity ها با مقدار مناسب انجام می شود. مثلاً، برای entity هایی که باید به دیتابیس اضافه شوند از Added برای EntityState استفاده می شود، برای entity هایی که تغییر کرده و نیاز به اپدیت شدن دارند از Modified و نهایتاً برای entity هایی که باید حذف شوند از Deleted استفاده می شود. این کار باعث می شود که در زمان فراخوانی متد SaveChanges بر روی کلاس context دستورات مناسب INSERT، UPDATE و یا DELETE بر روی دیتابیس صدا زده شوند. در همین قسمت توصیه می کنیم بسته ی ویدئویی آموزش استفاده از Entity Framework در برنامه های تجاری را استفاده کنید. در رابطه با کار کردن با Entity Framework در برنامه های enterprise مباحث پیشرفته ای وجود دارد که همه ی برنامه نویسان نیازمند دانستن آنها می باشند.

بسته ی آموزش ویدئویی شروع به کار با Entity Framework Core 2.0

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی شروع به کار با Entity Framework Core 2.0 دیدن کنید.

خب، بیاین کا را در قالب یک مثال ادامه دهیم. همانطور که گفتیم برای انجام عملیات صحیح CUD بر روی دیتابیس در disconnected scenario باید مراحل زیر انجام شوند:

  • ابتدا باید entity مورد نظر با EntityState مناسب به کلاس context اصطلاحاً attach شود. مقادیر EntityState می توانند Added، Modified و یا Deleted باشد.
  • پس از آن متد SaveChanges از کلاس context صدا زده می شود.

مثال زیر مراحل insert کردن یک رکورد جدید با استفاده از این مراحل را انجام می دهد. کد زیر را مشاهده کید.

//Disconnected entity
var std = new Student(){ Name = "Bill" };

using (var context = new SchoolContext())
{
    //1. Attach an entity to context with Added EntityState
    context.Add<Student>(std);
    
    //or the followings are also valid
    // context.Students.Add(std);
    // context.Entry<Student>(std).State = EntityState.Added;
    // context.Attach<Student>(std);
                  
    //2. Calling SaveChanges to insert a new record into Students table
    context.SaveChanges();
}

در کدی که در قسمت بالا مشاهده کردید، std یک شی از Student می باشد که در حالت disconnected است. متد context.Add<Student>() باعث attach شدن این شی به context می شود. ضمناً EntityState این شی بر روی مقدار Added قرار می گیرد. پس از آن با صدا زدن متد SaveChanges دستور INSERT زیر ساخته شده و بر روی دیتابیس صدا زده می شود. این موضوع باعث insert شدن یک رکورد جدید در جدول Students از دیتابیس می شود.

exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Students] ([Name])
VALUES (@p0);
SELECT [StudentId]
FROM [Students]
WHERE @@ROWCOUNT = 1 AND [StudentId] = scope_identity();',N'@p0 nvarchar(4000), 
@p1 nvarchar(4000) ',@p0=N'Bill'
go

در Entity Framework Core روش های مختلفی برای تنظیم کردن EntityState یک شی بر روی مقدار Added وجود دارد که همه ی آنها باعث insert شدن یک رکورد جدید در دیتابیس می شود. هر سه دستور زیر معال هم هستند.

context.Students.Add(std);
context.Entry<Student>(std).State = EntityState.Added;
context.Attach<Student>(std);

توصیه می کنیم که حتماً از بسته ی آموزش ویدئویی شروع به کار با Entity Framework Core و بسته ی آموزش ویدئویی شروع به کار با Entity Framework Core 2.0 دیدن کنید.

ضمناً این را هم بگوییم که Entity Framework Core دارای متدهای مختلفی در DbSet و DbContext است که باعث تنظیم شدن EntityState بر روی مقدار Added می شود و نهایتاً یک رکورد جدید در دیتابیس درج می شود. جدول زیر لیستی از این متدها را نشان می دهد.

دقت کنید که این متدها در Entity Framework Core معرفی شدند و در Entity Framework 6 و نسخه های قبلی وجود ندارند. هر دو ورژن این متدها (چه آنهایی که در DbSet تعریف شده اند چه آنهایی که در DbContext تعریف شده اند) کار یکسانی را انجام می دهند. این که از کدام یک استفاده کنید بیشتر تابع سلیقه و سبک کدنویسی شما است. در رابطه با بسته ی آموزش ویدئویی Entity Framework 6 در بسته به طور مفصل صحبت کرده ایم.

در قسمت بعدی از این آموزش در رابطه با درج کردن related data ها در Entity Framework Core در disconnected scenario صحبت خواهیم کرد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *