محل تبلیغات شما
SQL Server
سامانه مدیریت پروژه ها

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com


معرفی سامانه مدیریت پروژه های اداره کل راهداری خراسان جنوبی. این سامانه توسط گروه برنامه نویسی پی سی پروژه در بهمن ماه ۱۳۹۶ تحلیل و طراحی شده و از زبان برنامه نویسی C#بر پایه ASP.Net و فریمورک bootstrap برای طراحی سمت کلاینت (front-end) استفاده شده. این سامانه دارای چهار نوع کاربری مدیر کل: تعیین سطح دسترسی ها و مدیریت کاربران. . ادامه مطلب »
سامانه فاکتور آنلاین



درود دوستان در خدمتتون هستیم با یکی دیگه از محصولات جدیدمون با عنوان سامانه تحت وب فاکتور آنلاین این سامانه با هدف ارائه خدمات حسابداری و انبارداری آنلاین توسط پی سی پروژه طراحی و از فروردین ماه سال ۱۳۹۶ با همکاری اهر نت  بصورت رسمی شروع به کار کرد و شما عزیزان میتونین با عضویت در این سامانه از امکانات . ادامه مطلب »
مجموعه آموزشی بانک اطلاعاتی SQL Server از مبتدی تا پیشرفته



با سلام خدمت شما کاربران پی سی پروژه در خدمتتون هستیم با یک مجموعه آموزشی دیگر در زمینه پایگاه داده یا بانک اطلاعاتی توی آموزش های قبلی بیشتر به مباحث برنامه نویسی پرداختیم اما غافل از این که بانک اطلاعاتی از اهمیت بسیار بسیار زیادی برخورداره. تا این حد که بنا به تجربه کاری خودم میگم اصل یه پروژه یا . ادامه مطلب »
نرم افزار انبارداری پارس



با سلام خدمت کاربران گرامی. همانطور که در پست قبل گفته بودیم یک نرم افزار انبارداری که توسط تیم برنامه نویسی وبسایت طراحی و تولید شده است را در اختیارتان قرار می دهیم. امکانات نرم افزار: تعریف انبار، تعریف کالا، ورود اطلاعات از فایل اکسل، حواله های ورودی و خروجی، فاکتور خرید و فروش، گارانتی و تعمیر کالاهای فروخته شده، . ادامه مطلب »
دانلود پروژه صندوق بیمه محصولات کشاورزی به زبان سی شارپ

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

دانلود پروژه صندوق بیمه محصولات کشاورزی   توضیحاتی در مورد نرم افزار: نرم افزار صندوق بیمه محصولات کشاورزی با زبان برنامه نویسی C# و با استفاده از تکنولوژی ADO.NET نوشته شده است که در این قسمت به شرح آن می پردازیم. الف) بخش اطلاعات پایه: قسمتی که لازم است اطلاعات اولیه ی نرم افزار وارد شود و در سایر قسمت . ادامه مطلب »

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

دریافت داده یکی از پر کاربردترین کارهای برنامه نویسان می باشد، شاید بتوان گفت "برنامه نویسی چیزی به جز بازی با داده ها نیست" و بنده کاملا به این جمله معتقدم ؛ زیرا اگر به نرم افزارهای اطراف خود به دقت توجه نمایید ، متوجه این نکته می شوید که همه نرم افزارها کاری به جز بازی با داده انجام نمی دهند، از این رو عملیات CRUD بین برنامه نویسان بسیار گفته می شود ، به طوری که اگر به صحبت های چند برنامه نویس گوش کنید احتمال شنیدن عبارت CRUD در بین جملات آنها بسیار زیاد می باشد.
CRUD چهار عمل اصلی است که روی داده ها انجام می شود و شامل CREATE ، READ (Retrieve) ، UPDATE و DELETE می باشد ، در نهایت بقیه کاری که در نرم افزارها ممکن است انجام شود،  عملیات های محاسباتی می باشد.
Entity Framework یک پترن بسیار جذاب برای برنامه نویسان می باشد که با بررسی دقیق آن متوجه می شویم که Context آن نوعی پترن با نام Unit Of Work می باشد. (برای اطلاعات بیشتر درباره این پترن بسیار جذاب می توانید به اینجا مراجعه نمایید)
در ادامه در این پست آموزشی درباره عملیات READ صحبت خواهیم نمود و دریافت اطلاعات از منبع داده (دیتابیس) با کمک Entity Framework را بررسی خواهیم نمود.

در Entity Framework توابعی برای دریافت اطلاعات وجود دارند که عبارتند از:
First - FirstOrDefault - Single - SingleOrDefault - Find - ToList

اولین نکته ای که می توان درمورد توابع فوق بیان نمود این است که اجرای این دستورات موجب اجرا یک کد SQL روی دیتابیس می شود و در نتیجه خروجی این توابع داده می باشد.
من به شخصه دوست دارم اسم این توابع را توابع اجرایی بنامم ، زیرا این توابع موجب اتصال به دیتابیس و اجرای یک کد SQL روی آن و دریافت اطلاعات از دیتابیس می شوند.
در توضیح بیشتر باید بیان نمایم که خروجی تمامی توابع Entity Framework ااما داده نیست و بسیاری از توابع خروجی از نوع IQueryable می باشد ، IQueryable در اصل دستور SQL می باشد و بنابراین داده نیست و برای تبدیل شده به داده می بایست بوسیله یکی از توابع فوق روی دیتابیس اجرا شوند.
شاید بپرسید "خوب ، خروجی IQueryable به چه درد ما می خوره ؟"
در جواب باید خدمتتون عرض کنم که این نوع خروجی یکی از جاذبه های Entity Framework می باشد ، بطوری که شما می توانید چندین خروجی را با هم ادغام نمایید
به تکه کد زیر توجه نمایید :

var db = new MyDBContext();

var query1 = db.Employees.Where(c => c.Name == "Hamid Reza");

var query2 = query1.Where(c => c.Family == "Moradof");

var query3 = query2.OrderByDescending(c => c.ID);
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
var data1 = query3.ToList();

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

در ادامه ملاحظه می نمایید که درون query1 و query2 و query3 داده ای وجود ندارد و همه آنها حاوی دستور SQL می باشند (نوع این اشیاء IQueryable است)

خاصیت جالب اشیاء IQueryable این است که می توانید روی آنها شرط جدیدی بگذارید و در نتیجه شیء جدیدی از نوع IQueryable ایجاد نمایید ، بدون اینکه سرباری روی سرور داشته باشید (تا وقتی روی اشیاء IQueryable کار می کنید و از توابع اجرایی بیان شده در ابتدای این مقاله استفاده نمی نمایید ، هیچ اتصالی به دیتبایس انجام نمی شود و در نتیجه هیچ سرباری روی سرور نخواهید داشت)

به شخصه بیشترین استفاده ای که از IQueryable کرده ام ، ایجاد کوئری های پویا در جستجوی های پیشرفته بوده است ، بصورتی که شما می توانید بصورت پویا بر اساس پر بودن فیلدهای فرم جستجویتان به کررات شرط هایی به شیء IQueryable تان اضافه نمایید و در پایان شیء حاصل را توسط توابع اجرایی روی دیتابیس اجرا نمایید و خروجی آن را (که مسلما داده است) درون صفحه به کاربرتان نمایش دهید.

در کد فوق بنده در خط آخر به کمک تابع اجرایی ToList موجب اجرای دستور SQL موجود در شیء query3 بر روی دیتابیس شده ام و در نتیجه خروجی من از نوع داده است.

نکته جالب استفاده از IQueryable این است که Where های شما با هم AND می شوند و در اصل 2 دستور زیر با هم برابرند :


var db = new MyDBContext();

var query1 = db.Employees.Where(c => c.Name == "Hamid Reza");
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
var query2 = query1.Where(c => c.Family == "Moradof");

var query3 = db.Employees.Where(c => c.Name == "Hamid Reza"
&& c.Family == "Moradof");

در کد فوق query2 و query3 با یکدیگر برابر می باشند.


حال که به اهمیت IQueryable اشاره ای داشتیم و تفاوت توابع غیر اجرایی مانند Where و OrderBy را با توابع اجرایی مانند ToList و First فرا گرفتید، بهتر است به موضوع اصلی این پست که تفاوت توابع اجرایی با یکدیگر است بپردازیم.

تابع First :
این تابع فقط در زمانی استفاده می شود که مطمئن باشید خروجی این تابع یک رکورد (یک شیء) یا بیشتر از یک رکورد می باشد ، بنابراین اگر خروجی نال باشد (هیچ رکوردی بر نگشته باشد) تابع Exception آزاد خواهد کرد.
معمولا به دلیل حساسیت بالای این تابع و امکان بروز خطا (Exception) خیلی کم از این تابع استفاده می نماییم.
دقت نمایید که این تابع معادل دستور TOP 1 در SQL می باشد و بنابراین در صورتی که خروجی شامل چندین رکورد می باشد این تابع اولین رکورد را برای ما برمی گرداند.

تابع FirstOrDefault :
این تابع همانند تابع First می باشد ، با این تفاوت که در صورتی که خروجی حاوی داده نباشد (هیچ رکوردی بر نگردد) تابع مقدار نال برمی گرداند و ارور نمی دهد.
معمولا در کدهایمان بیشتر تمایل داریم از این تابع استفاده نماییم ، به نحوی می توان گفت به دلیل عدم بروز خطا در این تابع ، این تابع بهترین تابع برای دریافت یک رکورد از دیتابیس می باشد. (در بین برنامه نویسان بیشترین کاربرد را این تابع دارد)

باید توجه داشته باشید که اضافه شدن OrDefault به اسامی توابع دلیل بر این مورد دارد که اگر خروجی تابع دارای هیچ داده (رکوردی) نباشد ، تابع مقدار پیش فرض که همانا مقدار نال (NULL) است را بر می گرداند.

نکته قابل توجه دیگر این است که از آنجایی که خروجی توابعی که درون اسم آنها عبارت OrDefault می باشد ممکن است مقدار نال باشد ، در استفاده از خروجی این توابع باید دقت نمایید و حتما قبل از استفاده از خروجی  نال نبودن خروجی را بررسی نمایید تا در زمان استفاده از آن به خطا بر نخورید
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
به تکه کد زیر توجه نمایید:

var db = new MyDBContext();

var data = db.Employees.Where(c => c.ID == 3).FirstOrDefault();

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;

در کد فوق در صورتی که من شرط if را قرار ندهم ، در زمان استفاده از شیء data جهت پر کردن لیبل ها ، در صورتی که خروجی تابع FirstOrDefault مقدار نال باشد ، شیء data حاوی مقدار نال بوده و با خطا مواجه خواهیم شد.
مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه


تابع Single :
این تابع تقریبا عملکردی مشابه تابع First دارد ، با این تفاوت که معادل دستور TOP 1 در SQL نمی باشد و بنابراین دیگر همانند تابع First در مقابل خروجی های بیش از یک رکورد ایمن نمی باشد و در این صورت خطا (Exceprion) آزاد می نماید.
به بیان دیگر می توان گفت معادل بوذن دستور First با دستور TOP 1  در SQL این قابلیت را به تابع First داده است که در صورتی که با چندین رکورد مواجه شد ، اولین رکورد آن را برگرداند و بنابراین اروری نخواهیم داشت ، ولی در تابع Single ما باید فقط و فقط یک رکورد خروجی داشته باشیم و کمتر یا بیشتر از یک خروجی موجب بروز خطا (Exceprion) در کد ما خواهد شد که اصلا با ذائقه برنامه نویسان جور نیست

بنابراین باید بسیار در استفاده از این تابع دقت نمایید تا کد شما دچار خطا نشود.
(معمولا به دلیل احتمال بالای خطا در این تابع ، از آن استفاده نمی نماییم)


تابع SingleOrDefault :
این تابع مشابه تابع Single می باشد ، با این تفاوت که در برابر عدم وجود خروجی مقاوم است و دیگر ارور نمی دهد و مقدار نال بر می گرداند ، ولی کماکان در برابر تعداد بیش از یک رکورد در خروجی ضعف دارد و خطا می دهد.
همچنین همانطور که قبلا بیان شد ، توصیه می شود قبل از استفاده از خروجی توابعی که درون اسمشان OrDefault وجود دارد ، ابتدا نال نبودن خروجی را بررسی نمایید.
به تکه کد زیر توجه نمایید :

var db = new MyDBContext();

var data = db.Employees.Where(c => c.ID == 3).SingleOrDefault();

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;

تابع ToList :
این تابع برای دریافت لیستی از رکورد ها می باشد و تعداد رکورد های خروجی اصلا برایش مهم نیست، بدین معنی که بدون خروجی ، یک رکورد و یا چندین رکورد اصلا برای آن اهمیتی ندارد و خروجی را در قالب یک کالکشن از نوع List جنریک بر می گرداند که می تواند شامل آیتم هایی باشد و یا خالی باشد.
این تابع برای دریافت لیستی از داده ها مناسب می باشد و برای دریافت یک رکورد استفاده نمی شود.

به تکه کد زیر توجه نمایید:

var db = new MyDBContext();

var data = db.Employees.Where(c => c.Family == "Moradof").ToList();
 
Repeater1.DataSource = data;
Repeater1.DataBind():

ملاحظه می نمایید که یکی از بهترین روش ها برای پر کردن کنترل های داده ای ، استفاده از تابع ToList می باشد.
مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

تابع Find :
این تابع برای یافتن یک رکورد با کمک فیلد PrimatyKey می باشد ، تفاوت اصلی این تابع با بقیه توابع فوق این است که توابع فوق از درون دیتابیس داده را بر می گرداندند ولی این تابع از درون حافظ داده ها را بر می گرداند.
همانطور که می دانید EntityFramework یک نسخه از کل داده ها را روی حافظه کش می کند ، تابع Find در اصل درون کش EntityFramework را می گردد و داده مورد نظر را بر می گرداند.
البته بصورت دقیق نمی دانم که سیستم کش EntityFramework  به چه صورت می باشد و آیا حتما می توان انتظار داشت که همه اطلاعات دیتابیس درون کش EntityFramework  وجود داشته باشد ، ولی تا جایی که می دانم ، وقتی یک دیتایی را یکبار از طریق EntityFramework  از دیتبایس دریافت نمایید ، آن دیتا درون کش EntityFramework  قرار می گیرد.
(بررسی جزئیات دقیق تر این مورد را به خود شما می سپارم :دی )

تکه کد زیر طریقه استفاده از آن را نمایش می دهد:

var db = new MyDBContext();

var data = db.Employees.Find(c => c.ID == 3);

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;

توجه نمایید که باید حتما در ورودی تابع ، شرط مورد نظر را بر اساس ستون PrimaryKey دیتابیس بدهید.
همچنین باید توجه داشته باشید که در صورتی که خروجی یافت نشود، این تابع مقدار NULL را بر می گرداند ، بنابراین همانند توابعی که درون اسمشان عبارت OrDefault وجود داشت ، قبل از استفاده از خروحی این تابع نیز باید ابتدا نال نبودن خروجی را بررسی نمایید و سپس از خروجی آن استفاده کنید.

این تابع بین برنامه نویسان حرفه ای از محبوبیت زیادی برخوردار است و تنها ایرادش این است که فقط بر اساس ستون PrimaryKey می توان روی خروجی شرط گذاشت و برای گذاشتن سایر شروط باید از تابع Where قبل از آن استفاده نمایید.

نکته دیگر توابع اجرایی در نحوه استفاده از آنان می باشد ، همه توابع اجرایی فوق را می توانیم بصورت زیر نیز استفاده نماییم :

var db = new MyDBContext();

var data = db.Employees.FirstOrDefault(c => c.ID == 3);

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;
بصورتی که شرط فیلتر کردن خروجی را می توانیم در خود تابع وارد نماییم و دیگر نیازی به نوشتن تابع Where در قبل از آن نمی باشد ، البته استفاده از روش فوق و یا روشی که در بالای این پست بکار بردیم (همانند کد زیر) هیچ فرقی با هم ندارد و کاملا سلیقه ای می باشد.

var db = new MyDBContext();

var data = db.Employees.Where(c => c.ID == 3).FirstOrDefault();

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;

بنابراین این شمایید که باید تصمیم بگیرید از کدام یک از 2 کد فوق استفاده نمایید ، در عمل خروجی و کارکرد هر دو کد فوق یکسان می باشد.
خوب ، دریافت داده از EntityFramwork تقریبا نکته دیگه ای نداره .
امیدوارم از این پست آموزشی لذت برده باشید.
خوشحال میشم اگر نظر شما در مورد این پست رو بدونم.
یا حق

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

ارسال به 100 درجه کلوب دات کام   این مقاله رو به دوستات توی کلوب معرفی کن

    برچسب ها: آموزش نحوه دریافت داده با استفاده از Entity Framework، دریافت داده در Entity Framework، توابع اجرایی در Entity Framework، توابع پر کاربرد در Entity Framework، select در Entity Framework، 
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
نوشته شده در تاریخ پنجشنبه 22 مهر 1395    | توسط: ح.م    | طبقه بندی: آموزش Entity Framework،     | نظرات(2)
نمایش تاریخ شمسی در asp.net به کمک Extension Method

در گذشته نمایش تاریخ شمسی در asp.net یکی از چالش های بزرگ برنامه نویسان بود، اما امروزه با وجود متد های الحاقی (Extension Method) این کار به یکی از جالب ترین کارها تبدیل شده است.
قبل از پرداختن به کدها ابتدا باید با ماهیت Extension Method یا متدهای الحاقی آشنا شویم.

Extension Method یا متد الحاقی چیست ؟
متدهای الحاقی توابعی هستند که ما می توانیم از بیرون به یک کلاس اضافه نماییم.

بعنوان مثال کلاس زیر را در نظر بگیرید:


public class Person
{
  // props
  public int Id {get;set;}
  public string Name {get;set;}
  public string Family {get;set;}
 
 
  // ctor
  public Person()
  {}
 
}


فرض کنید به کدهای داخل کلاس دسترسی نداریم (مثلا یک فایل DLL داریم که کلاس فوق درون آن است و به داخل آن دسترسی نداریم و یا در گذشته یک پروژه نوشته ایم که کلاس فوق در آن استفاده شده است و با تغییر در ساختار کلاس ممکن است مشکلی در پروژه بوجود آید و .)

برای اینکه بتوانیم یک تابع (متد) به کلاس بالا اضافه نماییم ، داریم :

public static class MyExtClass
{

  public static string GetFullName(this Person value)
  {
    retuen (value.Name + " " + value.Family);
  }
 
}

نکات مهم در متد الحاقی بالا public بودن و استاتیک بودن تابع و کلمه کلیدی this در ورودی تابع می باشد.

دقت نمایید که نام کلاسی که در ادامه کلمه کلیدی this در ورودی تابع می آید ، نشان می دهد که تابع به کدام کلاس الحاق می شود.

دقت نمایید که متدهای الحاقی باید درون یک کلاس با دسترسی public و از نوع static  قرار بگیرد.

جالبی کار در اینجاست که اگر ما یک نمونه (instance) از کلاس Person بسازیم ،به راحتی به متد الحاقی GetFullName دسترسی داریم !


Person p = new Person
{
  Id = 1 ,
  Name = "Hamid Reza",
  Family = "Moradof"
};

string fullName = p.GetFullName();


ملاحظه می نمایید که به روش فوق با راحتی توانستیم یک متد را به کلاس Person الحاق نماییم.


نکته دیگر دستور بالا استفاده نکردن از کانستراکتور و بهره گیری از قابلیت جدید سی شارپ می باشد که در آن می توان بدون نیاز به نوشتن کانستراکتور و پاس دادن اطلاعات در آن ، پراپرتی ها را درون دو عدد براکت { } بصورت درجا مقدار دهی نمود.

توضیح اینکه در گذشته برای هر کلاس دو عدد کانستراکتور می نوشتیم که یکی کانستراکتور خالی و دیگری کانستراکتوری بود که به تعداد پراپرتی ها مقدار می گرفت و آنها را درون پراپرتی ها ست می نمود.
امروزه دیگر نیاز به نوشتن کانستراکتور دوم نیست و بصورت بالا می توان خیلی راحت پراپرتی ها را مقدار دهی نمود.

مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
نمایش تاریخ شمسی در asp.net به کمک Extension Method
برای این کار فقط کافی است یک متد به کلاس DateTime دات نت اضافه  (الحاق) نماییم :

public static class ExtendedMethods
{

  public static string ToPersian(this DateTime value)
  {
    PersianCalendar pc = new PersianCalendar();

    return string.Format("{0}/{1}/{2}",
      pc.GetYear(value),
      pc.GetMonth(value).ToString(),  
      pc.GetDayOfMonth(value).ToString());
  }
 
}

بنابراین دیگه نیاز نیست که نگران نمایش تاریخ شمسی توی پروژه هاتون باشین.

فقط کافیه که :

DateTime now = DateTime.Now;

Label1.Text = now.ToPersian();

این مورد در زمان استفاده از  Entity Framework خیلی بکارتون میاد ، وقتی که می خوایم لیستی از اطلاعات رو به همراه تاریخ شمسی نمایش بدیم.

مثلا:

using(Entities en = new Entities())
{
   rptPersons.DataSource = en.Persons.ToList()
     .Select(c => new
     {
       c.Id,
       c.Name,
       c.Family,
       RegisterDate = c.RegDate.ToPersian()
     })
  
   rptPersons.DataBind();
  
}

ملاحظه می کنید که با کمک Entity Framework  و  Extension Method به چه سادگی توانستیم اطلاعات اشخاص را به همراه تاریخ عضویت آنها (بصورت شمسی) توی پروژمون نمایش بدیم.

موفق باشید.

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

ارسال به 100 درجه کلوب دات کام   این مقاله رو به دوستات توی کلوب معرفی کن

    برچسب ها: متد الحاقی در سی شارپ، extension method در سی شارپ، آموزش extension method در سی شارپ، نمایش تاریخ شمسی در asp.net، تاریخ شمسی در asp.net، آموزش تاریخ شمسی در asp.net، 
| توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش Entity Framework، آموزش سی شارپ،     | 2)
استفاده از تابع foreach در entity framework در پروژه های asp.net
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
چند روز پیش یک کد دیدم که توش خیلی جالب با دستور lambda مستقیم روی خروجی دستور حرکت کرده بود و دیگه از foreachاستفاده نکرده بود،
تابع ForEach یکی از توابع خیلی جالب در entity framework است که من جدیدا باهاش افتخار آشنایی داشتم
این دستور رو توی 2 جا استفاده کردم و واقعا عالی بود (کلی کد نویسیم خلاصه شد )
استفاده از تابع ForEach در Entity framework:
همانطور که گفتم این تابع بسیار جالب در 2 جا استفاده داره:

1- در زمان ثبت یک داده در دیتابیس وقتی که می خوایم همزمان 2 جدول رو با هم پر کنیم که ارتباط یک به چند یا چند به چند دارند

فرض کنین که ما دو تا جدول با نام های Manager و NewsCat داریم که ارتباط چند به دارند.
بدین صورت که هر مدیر می تونه فقط توی موضوعاتی که براش مشخص شده خبر ارسال کنه (یه جور سیستم سطح دسترسی است)

دیاگرام دیتابیس ما این شکلیه:

مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه

در اینجا ما می خواهیم هر NewsCat جدیدی که ثبت می گردد ، همزمان درون جدول وسط نیز برای تمامی مدیران ارشد سایت نیز ثبت گردد تا بدین صورت هرگاه یکی از مدیران ارشد دسته بندی جدیدی ثبت می نماید ، دسترسی دسته بندی جدید به همه مدیران ارشد دیگر هم داده شود.

برای این کار کافی است در زمان ثبت NewsCat جدید ، به ازای هر یک از مدیران ارشد سایت یک رکورد در جدول وسط (Manager_NewsCat) ثبت نماییم تا سایر مدیران ارشد دسترسی ارسال خبر در دسته بندی جدید را داشته باشند.

برای این کار باید بصورت زیر کد بنویسیم:

// 1) Create a NewsCat Instance
NewsCat newItem =  new NewsCat { Title = txtTitle.Text };

// 2) Adding Access For All Master Admins into NewsCat Instance
en.Managers.Where(c => c.IsAdmin == true).ToList()
.ForEach(c => newItem.Manager_NewsCat
.Add(new Manager_NewsCat { Manager_Id = c.Id }));
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
// 3) add newsCat into E.F Context
en.NewsCats.AddObject(newItem);

// 4) saving all data into db
en.SaveChanges();

ابتدا باید یک Instance از کلاس NewsCat بسازیم و پراپرتی مورد نیازش را پر کنیم.

سپس روی جدول مقابل (Manager) یک foreach جالب می زنیم و به ازای تک تک مدیران ارشد (Where(c => c.IsAdmin == true یک Instance از کلاس Manager_NewsCat را به آن اضافه می نماییم.

در پایان Instance را به کانتکس E.F اضافه و همه تغییرات را ذخیره می کنیم.

کد بالا 2 نکته جالب دارد:
1- دیگه نیومدیم اطلاعات مدیران ارشد رو بگیریم و بریزیم توی یک متغیر و بعد روش Foreach سی شارپی بزنیم (دستور Foreach سی شارپ) و .
بلکه یهو با کمک دستورات Lambda و تابع ForEach مستقیم این کار رو انجام داده ایم.

2- کل این همه رکورد رو فقط با یکبار استفاده از تابع SaveChanges انجام داده ایم ! که این یعنی همه چی رو اول روی کش داریم اضافه می کنیم و در پایان این همه رکورد رو به یکبار کانکت به به دینابیس ، در دیتابیس می ریزیم (قابل توجه دوستانی که به دنبال بهینه سازی کداشون هستند)
دقت کنین که همیشه در Entity FrameWork برای اینکه با یک بار SaveChanges بتونین اطلاعاتتونو روی توی دیتابیس ذخیره کنین ، باید از رکورد مورد نظرتون یک Instance بسازین و سپس با کمک Navigate Property ها رکورد های دیگرتونو به این Instance اضافه می کنین و در پایان Instance تونو به کانتکس E.F اضافه می کنین و سپس با یکبار اجرای تابع SaveChanges کل رکوردها رو توی دیتابیس می ریزید.
و این است قدرت Entity FrameWork
 
مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه

2- در زمانی که مثلا قراره یک رکورد رو پاک کنیم که در یک جدول دیگر کلی رکورد داریم که به این وابسته است
یکی دیگر از مواقعی که تابع ForEach عزیز رو میشه استفاده کرد ، وقتیه که مثلا من می خوان یک مدیر (Manager) رو حذف کنم و دوست هم ندارم که توی دیتابیسم رابطه بین جداولم رو Cascade کنم.

مثلا برای حذف یک مدیر داریم:

// id of deleted manager (example)
int id = 2;
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
// 1) get deleted Item
var deletedItem = en.Managers.Where(c => c.Id == id).Single();

// 2) delete all access of newsCats
en.Manager_NewsCat.Where(c => c.Manager_Id == id).ToList().ForEach(c => en.DeleteObject(c));

// 3) delete manager from context
en.DeleteObject(deletedItem);

// 4) execute all changes into db
en.SaveChanges();


با فرض اینکه آی دی مدیری که قرار حذف بشه رو داریم (نحوه بدست آوردن آی دی کسی که قرار حذف بشه خارج از بحث ماست)

افزار \\ نمودار ER دانشگاه – ERD - Entity Relation Diagram

بانک اطلاعاتی SQL Server,

پروژه پایگاه داده اکسس اکسز Microsoft access

تابع ,، ,com09367292276azsoftir@gmail ,یک ,c ,comazsoftir ,comazsoftir com09367292276azsoftir@gmail ,com09367292276azsoftir@gmail comazsoftir ,می باشد ,این تابع ,استفاده از ,com09367292276azsoftir@gmail comazsoftir com09367292276azsoftir@gmail ,comazsoftir com09367292276azsoftir@gmail comazsoftir ,آموزشی دانشجویی برنامه ,دانشجویی برنامه نویسی

مشخصات

برترین جستجو ها

آخرین جستجو ها

تبلیغات متنی
ahangahang Evan's game خرید فروش قیمت روکش سیلیکونی کشی ظروف و مواد غذایی چیست Frank's receptions Phòng khám Đa khoa Pacific startuvipac انجمن صنفی کارگران مراکز مخابرات روستایی سبزواربزرگ knocualtrotlon معبود من! زمزمه نام تو امواج خروشان اضطراب را از ساحل طوفان زده قلبم محو می کند. borcentneto