PDA

View Full Version : سوال: کاربرد متد set , متد attach در entity framework چیه؟



odiseh
جمعه 09 تیر 1396, 23:01 عصر
سلام
من در ef code first تازه کارم .... می خواستم بدونم کاربرد دو تا متد set , attach در code first چیه؟ ن هر چی گشتم مثال خوبی ندیدم حتی سایت مایکروسافت هم مثالی من پیدا نکردم!
ممنون میشم توضیح بدین

ali_md110
شنبه 10 تیر 1396, 01:03 صبح
Set نوعی هست ب عنوان محفظه ای در دو شکل جنریک و غیر جنریک برای نگهداری موجودیت ها یا همون کلاس های EF
که در واقع این کلاسها هم بیانگر جداول بانک اطلاعاتی ما هستند
این کلاس Set دارای متدهایی برای اعمال کارهای متداول با بانک اطلاعاتی هست مثل Insert Update Delete که در اینجا به ترتیب میشه

Add-Attach-Remove


var s = Set<ApplicationUser>();
s.Add(---);
s.Attach();



ApplicationUser کلاس کاربران ماست که با تحویل دادن به DbSet میتونیم به رکوردهای اون جدول دسترسی داشته باشیم یا رکورد درج و حذف کنیم


public DbSet<ApplicationUser> ApplicationUsers{ get; set; }

کافیه این ApplicationUsers رو توی کدها صدا بزنیم و از توابع یا عبارات لامبدا بهره ببریم

odiseh
شنبه 10 تیر 1396, 01:44 صبح
با تشکر از شما دوست گرامی,
میشه لطفا توضیح بدین که فرق این متد set (در واقع مزیت استفاده ازش ) با اینکه از dbcontext و dbset استفاده کنیم چیه؟ مثلا همانطور که می دانید می تونیم بنویسیم
myContext.Courses.Add
پس اگر بخوام بهتر منظورم رو برسونم آینه که اگه این set. نباشه چه کارهایی نمی تونیم انجام بدیم؟

من سوالم رو در مورد متد Attach بعد از پاسخ شما می پرسم

ali_md110
شنبه 10 تیر 1396, 02:15 صبح
هیچ فرقی ندارند Dbset یک شی از روی dbcontext.set برای ما میسازه با همون متدها و خواص
بعضی وقتها میتونیم از set استفاده کنیم مثلا هنگام بکار گیری الگوی Unit Of Work


public IDbSet<TEntity> Set<TEntity>() where TEntity : class
{
return base.Set<TEntity>();
}


وقتی مینویسید


myContext.Courses.Add

این کلمه Courses در واقع تحویل داده شده به Dbset اون تابع Add هم به همین خاطر دسترسی داریم
در کلاس کانتکست معمولا اینطوری تعریف میکنند


public class ApplicationDbContext : DbContext>,


{

public ApplicationDbContext()
: base("ApplicationDbContext")

public DbSet<Course> Coursess{ get; set; }
{

ali_md110
شنبه 10 تیر 1396, 02:19 صبح
وظیفه Set یا DbSet اینه که با تحویل کلاسهای poco به این محفظه ها کلاسهای ما در معرض DbContext قرار بگیره و بتونیم متدهای مختلف رو اجرا کنیم

odiseh
شنبه 10 تیر 1396, 02:23 صبح
ممنونم
متد attach رو میشه بگید در چه مواقعی بکار می بریم؟ جایی خوندم که این متد برای وقتی هست که entity در memory هست ولی در db نیست. چطور ممکنه چنین حالتی بوجود بیاد؟ مگه ما entity های درون حافظه رو از روی db بر نمی داریم؟
تشکر از توجهتون
سوال دیگه اینکه برای یادگیری موثر الگویUnit of work چه کتابی رو پیشنهاد می کنید مهندس؟

ali_md110
شنبه 10 تیر 1396, 02:34 صبح
مزیت entity framework برای کار با اشیاء درون حافظه هست و دستورات اون به Linq to Object مشهوره
متد Attach برای ویرایش یک رکورد هست چه در دیتابیس باشه چه در حافظه
زمانیکه رکورد در دیتابیس هست باید
ابتدا باید با یک دستور رکورد از دیتابیس واکشی بشه و ریخته بشه درون حافظه و پس از تغییرات متد Attach بکار ببریم و سپس savechange
الگوی Unit Of work زیاد سخت نیست میحث خیلی ساده ای هست فقط باید کار با Interface ها رو بلد باشید

odiseh
شنبه 10 تیر 1396, 02:38 صبح
سپاس فراوان از شما