باسلام و عرض ادب خدمت تمام دوستان عزیز و گرامی خودم در سایت بزرگ برنامه نویسان ایران زمین.
بنده چند وقتی هستش که از ADO.NET سوئیچ کردم به برنامه نویسی به سبک Entity Framework که این مدیون جناب آقای کرامتی و کلاس های خوب ایشان هستم.
چند روزی بود که می خواستم از Entity Freamwork در معماری لایه ای استفاده کنم.
همه جا خوندم که Entity Framework قسمت Data Access Layer رو در بر میگیره.شروع کردم به جستجو و کسب اطلاعات تا اینکه توانستم اینکار رو انجام بدم.
شاید خنده تون بگیره که این کاره ساده چیه که من دارم در موردش تاپیک میزنم.اینو که همه بلدن.
من این آموزش رو میزارم برای کسایی که تازه وارد هستن و دنبال یک منبع فارسی برای این نوع برنامه نویسی هستن.
یکی از استادهای دانشگاهم همیشه می گفت راه رسیدن به خدا زیاده، منم اینجا از این جمله استادم استفاده می کنم و می گم راه و روش برنامه نویسی معماری لایه ای بهمراه Entity Framework زیاده و منم یک راهشو که شاید بدترین نوع باشه رو اینجا می گم تا یک سرنخ برای شروع و رسیدن به نحوه دیگه کدنویسی در این زمینه برای خودم و دوستان باشد.
به امید اینکه این آموزش مورد توجه دوستان واقع شود.
از دوستان دیگر که تجربه بسیار بالاتری در این زمینه دارن خواهش می کنم که روشهای دیگه ای که استفاده می کنن به ما هم یاد بدن.
توجه داشته باشید در آخر سورس برنامه بهمراه فایل آموزشی برای دانلود قرار داده می شود.
ببخشید که پرحرفی کردم.
بریم و شروع کنم.
برنامه تحت وب نوشته می شود
زبان برنامه نویسی : C#
بانک اطلاعاتی : SQL Server
فایل پروژه اضافه شد.
قدم اول : سناریو
خوب دوستان شروع کنیم. میخواهیم بک برنامه بنویسیم که نام، نام خانوادگی بهمراه شماره تلفن همراه شخص رو بگیریم و در دیتابیس ذخیره کنیم.
بتونیم با تکنولوژی های معماری لایه و Entity Framework هر 4 عمل اصلی یعنی اضافه کردن، ویرایش کردن، حذف کردن و نمایش را اجرا کنیم.
نکته : از Entity Framework – Database First استفاده می کنیم.
قدم دوم : ساخت پایگاه داده
یک پایگاه داده با نام Person ایجاد کنید.
در این پایگاه داده یک جدول با نام Contact با اجزای زیر بسازین.
اینم از دیتابیس
قدم سوم : ساخت Stored Procedures مورد نیاز
ما برای همه عملیات ها از Stored Procedures استفاده می کنیم.
خوب نیاز به 5 تا Stored Procedures برای این برنامه داریم.
1- Contact_SelectAll که یک resultset حاوی تمامی رکوردهای جدول Contact را برای ما برمیگرداند.
CREATE PROCEDURE Contact_SelectAll
AS
SET NOCOUNT ON
SELECT ID,Name,Family,Mobile,InsertDate,UpdateDate
FROM Contact
RETURN
2- Contact_SelectById که یک resultset حاوی رکورد مورد نظر ما از جدول Contact برمیگرداند.
CREATE PROCEDURE Contact_SelectById
@ID int
AS
SET NOCOUNT ON
SELECT ID,Name,Family,Mobile,InsertDate,UpdateDate
FROM Contact
Where ID = @ID
RETURN
3- Contact_Insert برای انجام عملیات Insert که یک resultset برابر ID رکورد ثبت شده برای ما برمیگرداند
CREATE PROCEDURE Contact_Insert
@Name nVarchar(50),
@Family nVarchar(50),
@Mobile nVarchar(16),
@InsertDate Datetime,
@UpdateDate Datetime
AS
Insert Into Contact
(Name,Family,Mobile,InsertDate,UpdateDate)
Values
(@Name,@Family,@Mobile,@InsertDate,@Updatedate)
SELECT CAST(SCOPE_IDENTITY() AS INT) AS Id
4- Contact_Update برای انجام عملیات ویرایش استفاده میشود
CREATE PROCEDURE Contact_Update
@ID int,
@Name nVarchar(50),
@Family nVarchar(50),
@Mobile nVarchar(16),
@InsertDate Datetime
AS
SET NOCOUNT ON
Update Contact
Set Name = @Name,
Family=@Family,
Mobile=@Mobile,
InsertDate=@InsertDate
Where
ID = @ID
RETURN
5- Contact_Delete برای حذف رکورد مورد نظر
CREATE PROCEDURE Contact_Delete
@ID int
AS
SET NOCOUNT ON
Delete Contact
Where
ID = @ID
RETURN
خوب عزیزان اینم از Stored Procedures های مورد نیاز
قدم چهارم : ساخت لایه Data Access Layer
1-
1- باز کردن Visual Studio 2010
2- ایجاد یک پروژه جدید از نوع Class Library project با زبان C# به نام PersonDAL
3- توجه داشته باشید Solution Name را بروی Person تغییر نام دهید.
4- حالا بروی نام Project کلیک راست کنید، Add و بعدش New Item
5- انتخاب ADO.NET Entity Data Model و اسمش رو برابر با PersonDataModel قرار دهید
6- Generate from database رو انتخاب کنید و بروی Next کلیک کنید
7- پایگاه داده خود را انتخاب کنید
8- انتخاب Table و Stored Procedures های طراحی شده و کلیک بر روی Finishe
9- تا اینجا مدل مدنظر خودتون رو به پروژه اضافه کردین حالا یک کلاس به نام CantactData.cs به پروژه اضافه کنید.
10- حالا کلاس را باز کنید و در بدنه اصلی کلاس
class ContactData
را به
public static class ContactData
تغییر دهید.
11- حالا باید Stored Procedures را بعنوان یک Function به Entity Framework بشناسانیم.
برای اینکار بر روی PersonDataModel.edmx کلیک کنید تا صفحه مربوطه باز شود.
بروی Contact کلیک راست کرده و Add بعد Funcation Import… کلیک کرده
صفحه باز شده به شکل زیر میباشد
از Combo Box مربوط به Stored Procedure Name اسم Cantact_ Delete رو انتخاب کنید و گزینه None رو انتخاب کنید و نام Function را وارد کنید
دوباره به مرحله Function Import بروید تا Function بعدی را Add کنیم
خوب به Add کردن Function ثبت اطلاعات جدید Insert دقت کنید.
به دلیل اینکه بعد از ثبت اطلاعات ID رکورد جدید را برمیگرداند به شکل زیر تعریف می شود.
برای 2 Stored Procedure مربوط به نمایش اطلاعات Cantact_SelectAll و Cantact_SelectById به عکس هر 2 توجه فرمایید.
اول به صفحه Function Import رفته و مانند عکس ها زیر عمل کنید
و برای Stored Procedure ویرایش اطلاعات Contact_Update به صفحه Function Import رفته و تنظیمات مانند عکس را انجام دهید
خوب حالا تمام Function های مورد نیاز آماده شد.
12- حالا به کلاسی که ساخته ایم میرویم و عملیات های مورد نیاز رو برای Function ها تعریف میکنیم.
کدها به شکل زیر میباشد.
#region Insert
public static int Insert(string name, string family, string mobile, DateTime insertDate)
{
using (PersonEntities db = new PersonEntities())
{
return Insert(db, name, family, mobile, insertDate);
}
}
public static int Insert(PersonEntities db, string name, string family, string mobile, DateTime insertDate)
{
return db.Cantact_Insert(name, family, mobile, insertDate, insertDate).ElementAt(0).Value;
}
#endregion
#region Update
public static void Update(int id, string name, string family, string mobile, DateTime updateDate)
{
using (PersonEntities db = new PersonEntities())
{
Update(db, id, name, family, mobile, updateDate);
}
}
public static void Update(PersonEntities db, int id, string name,
string family, string mobile, DateTime updateDate)
{
db.Contact_Update(id, name, family, mobile, updateDate);
}
#endregion
#region Delete
public static void Delete(int id)
{
using (PersonEntities db = new PersonEntities())
{
Delete(db, id);
}
}
public static void Delete(PersonEntities db, int id)
{
db.Contact_Delete(id);
}
#endregion
#region SelectById
public static Contact SelectById(int id)
{
using (PersonEntities db = new PersonEntities())
{
return SelectById(db, id);
}
}
public static Contact SelectById(PersonEntities db, int id)
{
return db.Contact_SelectById(id).ElementAtOrDefault(0);
}
#endregion
#region Select
public static List<Contact> SelectAll()
{
using (PersonEntities db = new PersonEntities())
{
return SelectAll(db);
}
}
public static List<Contact> SelectAll(PersonEntities db)
{
return db.Contact_SelectAll().ToList();
}
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PersonDAL
{
public static class ContactData
{
#region Insert
public static int Insert(string name, string family, string mobile, DateTime insertDate)
{
using (PersonEntities db = new PersonEntities())
{
return Insert(db, name, family, mobile, insertDate);
}
}
public static int Insert(PersonEntities db, string name, string family, string mobile, DateTime insertDate)
{
return db.Cantact_Insert(name, family, mobile, insertDate, insertDate).ElementAt(0).Value;
}
#endregion
#region Update
public static void Update(int id, string name, string family, string mobile, DateTime updateDate)
{
using (PersonEntities db = new PersonEntities())
{
Update(db, id, name, family, mobile, updateDate);
}
}
public static void Update(PersonEntities db, int id, string name,
string family, string mobile, DateTime updateDate)
{
db.Contact_Update(id, name, family, mobile, updateDate);
}
#endregion
#region Delete
public static void Delete(int id)
{
using (PersonEntities db = new PersonEntities())
{
Delete(db, id);
}
}
public static void Delete(PersonEntities db, int id)
{
db.Contact_Delete(id);
}
#endregion
#region SelectById
public static Contact SelectById(int id)
{
using (PersonEntities db = new PersonEntities())
{
return SelectById(db, id);
}
}
public static Contact SelectById(PersonEntities db, int id)
{
return db.Contact_SelectById(id).ElementAtOrDefault(0);
}
#endregion
#region Select
public static List<Contact> SelectAll()
{
using (PersonEntities db = new PersonEntities())
{
return SelectAll(db);
}
}
public static List<Contact> SelectAll(PersonEntities db)
{
return db.Contact_SelectAll().ToList();
}
#endregion
}
}
خوب دوستان عزیز تا اینجا Data Access Layer رو باهم طراحی کردیم.
انشالله فردا هم تا آخر برنامه میریم.
باتشکر از تمامی دوستان
به امید موفقیت ایران و ایرانی
ادامه دارد ...