دوره‌ای که می‌تونه مسیر شغلیت رو عوض کنه! دوره‌ای که می‌تونه مسیر شغلیت رو عوض کنه!
🎯 ثبت نام
بستن تبلیغات
تسلط کامل بر سی‌شارپ با یک دوره پروژه‌محور

یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شی‌گرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفه‌ای و امکانات کامل!

مشاهده بیشتر
تسلط جامع بر MVC Core برای توسعه وب حرفه‌ای

یادگیری MVC Core از مبانی تا پیشرفته: شی‌گرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژه‌های کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!

مشاهده بیشتر

آموزش پرس و جو و ذخیره Async (همسان سازی)

آموزش پرس و جو و ذخیره Async (همسان سازی)

شما می توانید از مزیت اجرای غیر هم زمان .net 4.5 با entity framework استفاده کنید.EF 6 می تواند با استفاده از DbContext به طور غیر هم زمان یک query و دستور را اجرا کند.
ابتدا ببینیم که چگونه پرس و جوی غیر همزمان را اجرا کنیم و سپس به طور غیر همزمان متد context.SaveChanges را فرخوانی می کنیم.


Query غیر هم زمان

 
private static async Task GetStudent()‎
        ‎    {‎
        ‎        Student student = null;‎
        ‎        using (var context = new SchoolDBEntities())‎
        ‎        {‎
        ‎            Console.WriteLine("Start GetStudent...");‎
        ‎‎            student = await (context.Students.Where(s => s.StudentID ‎‎== ‎‎1).FirstOrDefaultAsync());‎
        ‎            Console.WriteLine("Finished GetStudent...");‎
        ‎               ‎
        ‎        }‎
        ‎        return student;‎
        ‎}

همانطور که در کد بالا مشاهده کردید، متد GetStudent با async برای asynchronous (غیر هم زمان) مشخص شده است. نوع برگشتی متد asynchrounous باید Task باشد. متد GetStudent شی ای از نوع Student برمی گرداند بنابراین نوع برگشتی باید Task باشد.
همچنین پرس و جو با await مشخص شده است یعنی یک فراخوانی thread برای انجام دادن چیزی است مگر اینکه پرس و جو را اجرا می کند و داده را برمی گرداند. ما در اینجا از متد گسترشی FirstOrDefaultAsync از System.Data.Entity استفاده می کنیم. همچنین می توانید از دیگر متد های گسترشی به طور مناسب استفاده کنید مانند SingleOrDefaultAsync، ToListAsyn و غیره.


ذخیره کردن غیر همزمان(Asynchronous Save)

می توانید متد context.SaveChanges به طور غیر همزمان، همان طور که پرس وجوی async را فراخوانی می کنید.


  
private static async Task SaveStudent(Student editedStudent)‎
        ‎    {‎
        ‎        using (var context = new SchoolDBEntities())‎
        ‎        {‎
        ‎            context.Entry(editedStudent).State = EntityState.Modified;‎
        ‎            Console.WriteLine("Start SaveStudent...");‎
        ‎            int x = await (context.SaveChangesAsync());‎
        ‎‎            Console.WriteLine("Finished SaveStudent...");‎
        ‎        }‎
        ‎    }

نتیجه پرس و جوی async

شما زمانی می توانید نتیجه بگیرید که asynchronous از متد Wait به شرح زیر استفاده می کند.


  
public static void AsyncQueryAndSave()‎
        ‎    {‎
        ‎        var student = GetStudent();‎
        ‎        Console.WriteLine("Let's do something else till we get student..");‎
        ‎        student.Wait();‎
        ‎‎        var studentSave = SaveStudent(student.Result);‎
        ‎        Console.WriteLine("Let's do something else till we get student.." );‎
        ‎        studentSave.Wait();‎
        ‎    }

همان طور که در کد بالا می بینید، ما متد غیر همزمان GetStudent را به همان طریق معمول فراخوانی می کنیم و نتیجه را در متغییر student ذخیره می کنیم. سپس ما student.wait() را فراخوانی می کنیم که این بدین معنی است که فراخوانی thread تا زمانی که متد asynchronous کامل شود باید صبر کند، بنابراین می توانیم فرآیند دیگری انجام دهیم تا زمانی که از متد asynchronous نتیجه بگیریم.
کد نشان داده شده در بالا خروجی زیر را خواهد داشت.


آموزش Entity Framework

می توانید پروژه نمونه را برای Async query & save دانلود کنید.

1394/07/27 6998 2742
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...