Stored Procedure ها در MVC
شنبه 3 بهمن 1394در این مقاله قصد داریم به کمک EntityFramework روال های ذخیره شده و یا Stored Procedure هایی که در SQL نوشته ایم به داخل برنامه MVC خود وارد کنیم و به کمک آنها بدون استفاده از توابع لینک ، اطلاعات مورد نظر را از بانک بازیابی کنیم .
در این مقاله قصد داریم به کمک EntityFramework روال های ذخیره شده و یا Stored Procedure هایی که در SQL نوشته ایم به داخل برنامه MVC خود وارد کنیم و به کمک آنها بدون استفاده از توابع لینک ، اطلاعات مورد نظر را از بانک بازیابی کنیم .
برای شروع کار نیاز به یک دیتابیس داریم و همچنین روال هایی که در داخل این دیتابیس نوشته ایم .اسکریپت مربوط به ایجاد این دیتابیس ضمیمه این مقاله می باشد .بعد از این کار یک برنامه از نوع Asp.NET MVC ایجاد می کنیم
نوع پروژه را از نوع Empty در نظر گرفته و گزینه MVC را هم تیک می کنیم .
حال باید دیتابیس خود را با کمک Entity Framework و به صورت مدل به داخل برنامه خود اضافه کنیم .برای این کار مسیر شکل زیر را دنبال می کنیم
سپس در پنجره ای که باز می شود به EF دستور ساخت مدل از روی دیتابیس آماده را می دهیم
در پنجره بعدی بر روی گزینه New Connection کلیک می کنیم .
بعد از این نوع dataSource خود را Sql در نظر می گیریم
حال باید مسیر بانک اطلاعاتی خود را در اینجا وارد کنید
بعد ازاین کار شکل زیر را خواهید دید
و بعد از انتخاب هم جداول و هم Stored Procedure ها شکل زیر را خواهیم دید
بعد از اینکه مدل بانک را به پروژه اضافه کردید در داخل مدل و در قسمت Model.edmx شکل زیر را خواهید دید
این شکل بیانگر شمای جداول موجود در بانک و ارتباط بین این جداول است .در همین پنجره کلیک راست کرده و گزینه Browse Model را می زنیم در پنجره ای که باز می شود در قسمت Function Imports تمام روال هایی که از بانک وارد کرده ایم وجود دارد .
حال در داخل منوی Build گزینه Build MVCSPCRUD را بزنید
حال طبق شکل زیر یک کنترلر به پروژه اضافه می کنیم
نوع این کنترلر از نوع EF with Views است .
حال برای این کنترلر می توانیم مدل دلخواه خود را وارد نماییم به دلیل اینکه روال ها را هم به داخل پروژه اضافه کرده ایم این روال هر کدام برای خروجی خود یک کلاس ایجاد کرده اند بنابراین این نوع کلاس ها هم علاوه بر کلاس هایی که در حالت عادی برابر با جداول بود به برنامه اضافه می شوند.
اما در این حالت مدلی که انتخاب می کنیم برابر با نگاشت شده یکی از جداول است و در این حالت نام آن tbl_product است .با این کار یک کنترلر با تمام چهار عمل اصلی و تمام view های مربوطه به صورت خودکار ساخته می شوند .به عنوان نمونه صفحه ایندکس مربوط به صورت زیر است
در داخل Action ایندکس مربوط به کنترلر tbl_Product از کدهای زیر استفاده کرده ایم
public ActionResult Index() { return View(db.tbl_Product.ToList()); } // GET: tbl_Product/Details/5 public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } tbl_Product tbl_Product = db.tbl_Product.Find(id); if (tbl_Product == null) { return HttpNotFound(); } return View(tbl_Product); }
همان طور که می بینید از توابع لینک و لامبدا استفاده کرده ایم .می توانستیم بدون اینکه از این توابع استفاده کنیم از توابع Stored Procedure خود که در حال حاضر به مدل اضافه شده اند استفاده کنیم.برای تست این روش یک کنترلر خالی به نام Product 2ایجاد می کنیم در داخل این کنترلر کدهای زیر را می نویسیم
// GET: product2 private DB116wEntities db = new DB116wEntities(); public ActionResult Index() { var list = db.SelectAllProduct().ToList(); return View(list); } public ActionResult selectone(int? id) { var tblProduct = db.selectoneProduct(id); if (tblProduct == null) { return HttpNotFound(); } return View(tblProduct.First()); }
همان طور که می بینید توابع SelectAllProductو selectone همان روال های ذخیره شده ما می باشند که در اینجا استفاده شده اند اگر view اکشن SelectAllProductو را ببینید ، همه محصولات در داخل ان وجود دارند و درست شبیه اکشن ایندکس از کنترلر tbl_product است .اگر اکشن selectone را اجرا کنید شکل زیر را خواهید دید
به آدرسی که وارد کرده ایم دقت کنید.
نتیجه ای که از مقاله می توان گرفت این است که کار با داده ها و همین طور Busicess خود را سمت دیتابیس انجام داده و از همان توابع در سمت برنامه استفاده می کنیم .مثلا در برنامه های حسابداری که نیاز به گزارش های مختلف دارند وبا داده های خود کارهای مختلفی انجام می دهند استفاده از Stored Prodedure ها کار ها را راحت تر کرده و منطق کار با داده ها را در سمت دیتابیس متمرکز می کند.
- ASP.net MVC
- 3k بازدید
- 9 تشکر