نگاهی به Entity framework 7

بخش اولEf core نسخه سبک، قابل انعطاف، اپن سورس و چند سکویی از تکنولوژی محبوب Entity Framework است.Ef7 یا ef core در واقع نسخه ی بروز شده ی ef6 هست که از نظر قدرت،سرعت و بهینه شدن تغییرات بسیاری انجام داده است. نسخه های قبلی Entity Framework در سایت CodePlex منتشر می شدند ولی نسخه ی هفتم از Entity Framework در سایت Git Hub منتشر خواهد شد.برخی از مزایا :پشتیبانی از بانک های غیر رابطه ای و اشیا درون حافظه : ef در نسخه جدید خود این قابلیت رو اعمال کرده که شما به راحتی بتوانید پایگاه داده ی خود را از حالت sql Server به sqlite تغییر دهید. این امر باعث توسعه سریعتر و انعطاف پذیری بهتر در پروژه ها می شود.اتصال و کار با پایگاه داده sqlite باعث شده که EF قابلیت کار با سیستم های مختلف مانند لینوکس و مک را داشته باشد.پشتیبانی از Windows Phone، Windows Store، linux و Mac پیاده سازی نیازهای خواسته شده برنامه نویسان : تغییرات بسیاری در بخش کدنویسی و بخصوص کدنویسی به کمک linq در ef core اعمال شده که این امر باعث به صفر رساندن حملات sql injection می شود.از دیگر تغییرات در این بخش حذف Lazy loading می باشد که جایگزینی به نام پروکسی جای آن را گرفته.از دیگر تغییرات:حذف EDMX و ادامه ی Database First : در نسخه ی هفتم از Entity Framework از روش Model First پشتیبانی نمی شود. مایکروسافت در نسخه جدید پشتیبانی از SQLite ، In-Memory را قرار داده که در In-Memory استفاده از حافظه برای تست ذخیره ی داده ها بدون ثبت داده در پایگاه داده است.سرعت بخشیدن به حذف و ویرایش و ساخت پایگاه داده بدون استفاده از migrations که یکی از تقاضاهای بسیار بوده.کمتر کردن DLL ها در خروجی به دلیل چندسکویی شدن EF و راحتی و سرعت بیشتر.یکی از قابلیت های جالب در EF قابلیتی با نام Table splitting است. فرض کنید فیلد IsDelete را به تیبل کاربران اضافه کرده اید. در این صورت باید تمام کوئری هایی که select کاربران در آن قرار دارد را تغییر داده تا کاربران حذف شده را نمایش ندهد. در چنین مواقعی درصورت بزرگ بودن پروژه تغییرات زیادی باید در کدها انجام شود. با قابلیت جالب و جدید EF فیلتری روی جدول اعمال می شود که روی تمام جداول اعمال می شود و با یک خط کد دیگر نیاز به تغییر کلی سرویس یا اکشن نیست!protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity<Post>().HasQueryFilter(p => !p.IsDeleted&& p.TenantId == this.TenantId );}این قابلیت حالت عکس نیز دارد ، یعنی شما میتوانید به کمک این قابلیت در بخشی که نیاز دارید کاربران حذف شده را نیز ببینید.دیگر قابلیت اضاف شده EF.Functions.Like() است که به کمک آن میتوان از حالت Like در اس کیو ال استفاده کرد.var aCustomers =from c in context.Customerswhere EF.Functions.Like(c.Name, "a%")select c;مزایا و قابلیت های EF7 بسیار گسترده و جذاب هستند که در قالب این متن نمیگنجند. در پایان چند نکته ی کار با EF رو باهم بررسی میکنیم که سرعت بیشتر و کمتر کردن بار روی سرور را ارمغان می آورند:تنها دریافت رکوردهای مورد نیاز : کد:string city = "New York";List<School> schools = db.Schools.ToList();List<School> newYorkSchools = schools.Where(s => s.City == city).ToList();کد بهینه :List<School> newYorkSchools = db.Schools.Where(s => s.City == city).ToList();یاIQueryable<School> schools = db.Schools;List<School> newYorkSchools = schools.Where(s => s.City == city).ToList();· حداقل رفت و برگشت به دیتابیسکد:string city = "New York";List<School> schools = db.Schools.Where(s => s.City == city).ToList();var sb = new StringBuilder();foreach(var school in schools){ sb.Append(school.Name); sb.Append(": "); sb.Append(school.Pupils.Count); sb.Append(Environment.NewLine);}کد بهینه :List<School> schools = db.Schools .Where(s => s.City == city) .Include(x => x.Pupils) .ToList();افزونگی کشِ پلنکد:var schools = db.Schools .OrderBy(s => s.PostalZipCode) .Skip(model.Page * model.ResultsPerPage) .Take(model.ResultsPerPage) .ToList(); کد بهینه :int resultsToSkip = model.Page * model.ResultsPerPage;var schools = db.Schools .OrderBy(s => s.PostalZipCode) .Skip(() => resultsToSkip) //must pre-calculate this value .Take(() => model.ResultsPerPage) .ToList();فراخوانی متد شناسایی تغییراتکد:for (int i = 0; i < 2000; i++){ Pupil pupil = GetNewPupil(); db.Pupils.Add(pupil);}db.SaveChanges();کد بهینه:var list = new List<Pupil>();for (int i = 0; i < 2000; i++){ Pupil pupil = GetNewPupil(); list.Add(pupil);}db.Pupils.AddRange(list);db.SaveChanges();منابع:http://yon.ir/xea86http://yon.ir/Lkqr9http://yon.ir/2sXAZhttp://yon.ir/EW3OVhttp://yon.ir/oU0jBhttp://yon.ir/xbArn