PDA

View Full Version : آموزش: آموزش استفاده از Entity Framework در معماری 3 لایه - همراه با مثال عملی



mohsen_f_b
یک شنبه 24 اردیبهشت 1391, 23:43 عصر
باسلام و عرض ادب خدمت تمام دوستان عزیز و گرامی خودم در سایت بزرگ برنامه نویسان ایران زمین.
بنده چند وقتی هستش که از 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 با اجزای زیر بسازین.

http://e-negin.ir/Mohsen/L/1.jpg

اینم از دیتابیس

قدم سوم : ساخت 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 های مورد نیاز

http://e-negin.ir/Mohsen/L/2.jpg


قدم چهارم : ساخت لایه Data Access Layer

1-
1- باز کردن Visual Studio 2010

2- ایجاد یک پروژه جدید از نوع Class Library project با زبان C#‎‎‎‎‎‎‎ به نام PersonDAL
3- توجه داشته باشید Solution Name را بروی Person تغییر نام دهید.
http://e-negin.ir/Mohsen/L/3.jpg

http://e-negin.ir/Mohsen/L/4.jpg

4- حالا بروی نام Project کلیک راست کنید، Add و بعدش New Item

http://e-negin.ir/Mohsen/L/5.jpg

5- انتخاب ADO.NET Entity Data Model و اسمش رو برابر با PersonDataModel قرار دهید
http://e-negin.ir/Mohsen/L/6.jpg
6- Generate from database رو انتخاب کنید و بروی Next کلیک کنید

http://e-negin.ir/Mohsen/L/7.jpg
7- پایگاه داده خود را انتخاب کنید
http://e-negin.ir/Mohsen/L/8.jpg
8- انتخاب Table و Stored Procedures های طراحی شده و کلیک بر روی Finishe

http://e-negin.ir/Mohsen/L/9.jpg
9- تا اینجا مدل مدنظر خودتون رو به پروژه اضافه کردین حالا یک کلاس به نام CantactData.cs به پروژه اضافه کنید.

http://e-negin.ir/Mohsen/L/10.jpghttp://e-negin.ir/Mohsen/L/11.jpg

10- حالا کلاس را باز کنید و در بدنه اصلی کلاس

class ContactData
را به
public static class ContactData
تغییر دهید.
http://e-negin.ir/Mohsen/L/12.jpg

11- حالا باید Stored Procedures را بعنوان یک Function به Entity Framework بشناسانیم.
برای اینکار بر روی PersonDataModel.edmx کلیک کنید تا صفحه مربوطه باز شود.
http://e-negin.ir/Mohsen/L/13.jpg

بروی Contact کلیک راست کرده و Add بعد Funcation Import… کلیک کرده
http://e-negin.ir/Mohsen/L/14.jpg
صفحه باز شده به شکل زیر میباشد
http://e-negin.ir/Mohsen/L/15.jpg
از Combo Box مربوط به Stored Procedure Name اسم Cantact_ Delete رو انتخاب کنید و گزینه None رو انتخاب کنید و نام Function را وارد کنید
http://e-negin.ir/Mohsen/L/16.jpg
دوباره به مرحله Function Import بروید تا Function بعدی را Add کنیم
خوب به Add کردن Function ثبت اطلاعات جدید Insert دقت کنید.
به دلیل اینکه بعد از ثبت اطلاعات ID رکورد جدید را برمیگرداند به شکل زیر تعریف می شود.
http://e-negin.ir/Mohsen/L/17.jpg

برای 2 Stored Procedure مربوط به نمایش اطلاعات Cantact_SelectAll و Cantact_SelectById به عکس هر 2 توجه فرمایید.
اول به صفحه Function Import رفته و مانند عکس ها زیر عمل کنید
http://e-negin.ir/Mohsen/L/18.jpg
http://e-negin.ir/Mohsen/L/19.jpg

و برای Stored Procedure ویرایش اطلاعات Contact_Update به صفحه Function Import رفته و تنظیمات مانند عکس را انجام دهید
http://e-negin.ir/Mohsen/L/20.jpg

خوب حالا تمام 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



http://e-negin.ir/Mohsen/L/21.jpg

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 رو باهم طراحی کردیم.
انشالله فردا هم تا آخر برنامه میریم.

باتشکر از تمامی دوستان
به امید موفقیت ایران و ایرانی

ادامه دارد ...

mohsen_f_b
یک شنبه 24 اردیبهشت 1391, 23:46 عصر
سلام دوستان عزیز
نمی دونم بخش اول آموزش چطور بود.
ببخشید که کمتر توضیح دادم، سعی کردم همش با عکس باشه که درکش راحت تر باشه.
آموزش که کامل شد در مورد این نحوه برنامه نویسی باهم گفتگو می کنیم.
در ضمن دارم 2 مدل دیگه از این نوع برنامه نویسی رو آماده می کنم که انشالله در ادامه این سرسی آموزش براتون قرار میدم.
خوب بریم با هم Business Logic Layer رو طراحی کنیم.
دیشب بیشتر راه رو رفتیم و شما هم تمرین کردین و حالا سرحال شروع می کنیم.

قدم پنجم : ساخت Business Logic Layer
1- پروژه رو باز کنید
2- حالا باید یک پروژه جدید به همین Solution اضافه کنیم که اسمش هم میزاریم PersonBLL
لطفا مراحل رو با عکس پیش برین

http://e-negin.ir/Mohsen/L/22.jpghttp://e-negin.ir/Mohsen/L/23.jpg

3- حالا شما لایه Business Logic Layer به Data Access Layer متصل کنید. شما می دانید که هر لایه فقط با لایه بالای و پایینی خود می توانه ارتباط برقرار کنه.
خوب برای این کار مراحل رو همراه با عکس انجام بدین
بروی References کلیک راست می کنیم و از تب Project نام پروژه PersonDAL رو انتخاب می کنیم

http://e-negin.ir/Mohsen/L/24.jpg
http://e-negin.ir/Mohsen/L/25.jpg

4- دوباره بر روی Referencs کلیک راست کرده و از تب .NET گزینه System.Data.Entity رو انتخاب می کنیم
http://e-negin.ir/Mohsen/L/26.jpg

5- حالا یک کلاس درست کنید با نام ContactEO
http://e-negin.ir/Mohsen/L/27.jpg

6- حالا در صفحه کلاس 2 تا NameSpase باید Add کنیم
using System.Collections;
using PersonDAL;

7- حالا شروع می کنیم به کد نویسی در بدنه کلاس
یادم رفت بگم که قبل از شروع حتما
class ContactEO

را به
public class ContactEO
تغییر بدین.
دیدین داشت یادم میرفت بگم. :لبخند:
حالا تمام مقادیر و موجودیت ها رو تعریف می کنیم.

public int Id { get; set; }
public string Name { get; set; }
public string Family { get; set; }
public string Mobile { get; set; }
public DateTime InsertDate { get; set; }
public DateTime UpdateDate { get; set; }

بعدش یک تابع تعریف می کنیم که نام و نام خانوادگی رو کنار هم قرار بده و بعنوان یک خروجی برای ما بصورت FullName

public string FullName
{
get
{
return Name + ", " + Family;
}
}

حالا برای عملیات ثبت و ویرایش برای مقادیر یک Validation میزاریم که چک کنه مقادیر حتما وارد شده است.

private void ValidateSave(ref ArrayList validationErrors)
{
if (Name.Trim() == "")
{
validationErrors.Add("نام خالی وارد شده");
}

if (Family.Trim() == "")
{
validationErrors.Add("نام خانوادگی خالی وارد شده");
}

if (Mobile.Trim() == "")
{
validationErrors.Add("تلفن همراه خالی وارد شده");
}
}

بعدش نوبت به این میرسه کد عملیات های Insert و Update رو بنویسیم

public bool Save(ref ArrayList validationErrors)
{
ValidateSave(ref validationErrors);

if (validationErrors.Count == 0)
{
if (Id == 0)
{
Id = ContactData.Insert(Name, Family, Mobile, InsertDate);
}
else
{
ContactData.Update(Id, Name, Family, Mobile, UpdateDate);
}
return true;
}
else
{
return false;
}
}

دوستان کدها کاملا ساده نوشته شده بازم هرجاش واستون نا مفهموم هستش بگین کامل توضیح بدم
تا اینجا موفق شدیم هر 2 عملیات رو کنترل و با موفقیت انجام بدیم.
این کد هم برای DELETE استفاده می کنیم

public void Delete()
{
ContactData.Delete(Id);
}

حالا برای اینکه یک رکورد رو برگردانیم و ازش استفاده کنیم از کد زیر استفاده می کنیم

internal void MapData(Contact contact)
{
Id = contact.ID;
Name = contact.Name;
Family = contact.Family;
Mobile = contact.Mobile;
InsertDate = contact.InsertDate.Value;
UpdateDate = contact.UpdateDate.Value;

}
public bool Select(int id)
{
Contact contact = ContactData.SelectById(id);

if (contact != null)
{
MapData(contact);
return true;
}
else
{
return false;
}
}

و در آخر این تابع که کل رکوردها رو در یک شی لیست برمیگرداند

public static List<ContactEO> SelectAll()
{
List<ContactEO> contacts= new List<ContactEO>();

List<Contact> contactDTOs = ContactData.SelectAll();

foreach (Contact contactDTO in contactDTOs)
{
ContactEO ContactEO = new ContactEO();
ContactEO.MapData(contactDTO);
contacts.Add(ContactEO);
}

return contacts;
}

در آخر کلاس مربوطه به شکل زیر میشه

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using PersonDAL;

namespace PersonBLL
{
public class ContactEO
{
public int Id { get; set; }
public string Name { get; set; }
public string Family { get; set; }
public string Mobile { get; set; }
public DateTime InsertDate { get; set; }
public DateTime UpdateDate { get; set; }

public string FullName
{
get
{
return Name + ", " + Family;
}
}
private void ValidateSave(ref ArrayList validationErrors)
{
if (Name.Trim() == "")
{
validationErrors.Add("نام خالی وارد شده");
}

if (Family.Trim() == "")
{
validationErrors.Add("نام خانوادگی خالی وارد شده");
}

if (Mobile.Trim() == "")
{
validationErrors.Add("تلفن همراه خالی وارد شده");
}
}
public bool Save(ref ArrayList validationErrors)
{
ValidateSave(ref validationErrors);

if (validationErrors.Count == 0)
{
if (Id == 0)
{
Id = ContactData.Insert(Name, Family, Mobile, InsertDate);
}
else
{
ContactData.Update(Id, Name, Family, Mobile, UpdateDate);
}
return true;
}
else
{
return false;
}
}

public void Delete()
{
ContactData.Delete(Id);
}

internal void MapData(Contact contact)
{
Id = contact.ID;
Name = contact.Name;
Family = contact.Family;
Mobile = contact.Mobile;
InsertDate = contact.InsertDate.Value;
UpdateDate = contact.UpdateDate.Value;

}
public bool Select(int id)
{
Contact contact = ContactData.SelectById(id);

if (contact != null)
{
MapData(contact);
return true;
}
else
{
return false;
}
}

public static List<ContactEO> SelectAll()
{
List<ContactEO> contacts= new List<ContactEO>();

List<Contact> contactDTOs = ContactData.SelectAll();

foreach (Contact contactDTO in contactDTOs)
{
ContactEO ContactEO = new ContactEO();
ContactEO.MapData(contactDTO);
contacts.Add(ContactEO);
}

return contacts;
}
}
}


و حالا پروژه را Save کنید
این هم از Business Logic Layer.
دیدن تا اینجا کاری نداشت، بزودی هم UI رو باهم می نویسیم.
دوستان اگر توضیح ندادم زیاد بخاطر اینکه تمام مفاهیم ساده هستش. از دوستان هر کس مشکل داشت در کدها سوال کنه جواب گو هستیم.

نظرتون تا اینجا چیه؟ خوب بوده؟!ساده هستش یا سخته؟!

باتشکر از تمامی دوستان
به امید موفقیت ایران و ایرانی

ادامه دارد ...

mohsen_f_b
یک شنبه 24 اردیبهشت 1391, 23:46 عصر
دوستان عزیز سلام
ببخشید از اینکه این 2 روز نتونستم کامل کنم پروژه رو .
خوب بریم مرحله آخر کار هم انجام بدیم باهم دیگه.

قدم ششم : ساخت Web Form یا همان UI Layer

1- یک پروژه جدید با نام PersonUI
نکته : لطفا این بخش رو حتما به عکس توجه کنید. دیگه Class Library انتخاب نمی کنیم.
http://e-negin.ir/Mohsen/L/28.jpg
2- حالا یک صفحه aspx با نام Person.aspx ایجاد نمایید.
http://e-negin.ir/Mohsen/L/29.jpg
3- کدهای زیر را در قسمت Source HTML صفحه وارد نمایید. با کدهای زیر جابجا کنید.

<%@ Page Language="C#‎‎‎" AutoEventWireup="true" CodeBehind="Person.aspx.cs" Inherits="PersonUI.Person" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.style1
{
text-align: left;
}
</style>
</head>
<body dir="rtl" style="font-family:Tahoma;font-size:12px">
<form id="form1" runat="server">
<div>
<table>
<tr>
<td colspan="2">
<asp:Label runat="server" ID="lblErrorLabel" Text="لطفا توجه کنید :"
ForeColor="Red" Visible="false"></asp:Label>
<asp:Label runat="server" ID="lblErrorMessages" ForeColor="Red" Visible="false"></asp:Label>
</td>
</tr>
<tr>
<td class="style1">
کاربر مورد نظر را انتخاب کنید :</td>
<td>
<asp:DropDownList runat="server" ID="ddlUsers" AutoPostBack="True"
onselectedindexchanged="ddlUsers_SelectedIndexChanged">
</asp:DropDownList>
</td>
</tr>
<tr>
<td class="style1">
نام :</td>
<td>
<asp:TextBox runat="server" ID="txtFirstName"></asp:TextBox>
</td>
</tr>
<tr>
<td class="style1">
نام خانوادگی :</td>
<td>
<asp:TextBox runat="server" ID="txtLastName"></asp:TextBox>
</td>
</tr>
<tr>
<td class="style1">
شماره همراه :</td>
<td>
<asp:TextBox runat="server" ID="txtMobile"></asp:TextBox>
</td>
</tr>
<tr>
<td class="style1">
تاریخ ثبت :
</td>
<td>
<asp:Label runat="server" ID="lblInserted"></asp:Label>
</td>
</tr>
<tr>
<td class="style1">
تاریخ آخرین ویرایش :
</td>
<td>
<asp:Label runat="server" ID="lblUpdated"></asp:Label>
</td>
</tr>
</table>
<asp:Button runat="server" ID="btnSave" Text="ثبت" Font-Names="Tahoma"
onclick="btnSave_Click" Width="100px" />
<asp:Button ID="btnDelete" runat="server" Text="حذف" Font-Names="Tahoma"
onclick="btnDelete_Click" Width="100px" />
</div>
</form>
</body>
</html>


4- حالا بریم در صفحه Code Behind
اول از همه باید لایه Business رو به پروژه اضافه کنید.
بروی References پروژه کلیک راست کنید و Add References را کلیک کنید.
و لایه PersonBLL را انتخاب کنید.
http://e-negin.ir/Mohsen/L/30.jpg

حالا namespace PersonBLL را به صفحه با کد زیرAdd کنید.
using PersonBLL;
5- حالا برای اینکه اطلاعات در DropDown نمایش داده شود این تابع را می نویسیم.

//نمایش کاربران در DROPDOWN
private void LoadUserDropDownList()
{
ddlUsers.DataSource = ContactEO.SelectAll();

ddlUsers.DataTextField = "FullName";
ddlUsers.DataValueField = "Id";
ddlUsers.DataBind();

ddlUsers.Items.Insert(0, new ListItem("ایجاد کاربر جدید", ""));
}

6- در Page Load تابع بالا را فراخوانی می کنیم.

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadUserDropDownList();
}
}


7- در Evant Click مربوط به دکمه ثبت کدهای زیر را قرار می دهیم

//انجام عملیات ثبت و بروزرسانی
protected void btnSave_Click(object sender, EventArgs e)
{
ArrayList validationErrors = new ArrayList();
ContactEO userAccount = new ContactEO();

if (ddlUsers.SelectedItem.Value != "")
{
//ویرایش
userAccount.Id = Convert.ToInt32(ddlUsers.SelectedValue);
}

userAccount.Name = txtFirstName.Text;
userAccount.Family = txtLastName.Text;
userAccount.Mobile = txtMobile.Text;

userAccount.Save(ref validationErrors);

if (validationErrors.Count > 0)
{
ShowValidationMessages(validationErrors);
}
else
{
//فراخوانی دوباره DropDwon
LoadUserDropDownList();

//Select the one the user just saved.
ddlUsers.Items.FindByValue(userAccount.Id.ToString ()).Selected = true;

lblErrorLabel.Visible = false;
lblErrorMessages.Visible = false;
}
}

8- تابع زیر هم برای نمایش پیغام ها کد نویسی می کنیم.
//نمایش پیغام ها
private void ShowValidationMessages(ArrayList validationErrors)
{
if (validationErrors.Count > 0)
{
lblErrorLabel.Visible = true;
lblErrorMessages.Visible = true;
lblErrorMessages.Text = "<br />";

foreach (string message in validationErrors)
{
lblErrorMessages.Text += message + "<br />";
}
}
else
{
lblErrorLabel.Visible = false;
lblErrorMessages.Visible = false;
}
}

9- در Evant SelectedIndexChanged مربوط به DropDown هم کد های زیر را قرار می دهیم.

protected void ddlUsers_SelectedIndexChanged(object sender, EventArgs e)
{
txtFirstName.Text = "";
txtLastName.Text = "";
lblInserted.Text = "";
lblUpdated.Text = "";

if (ddlUsers.SelectedValue != "")
{
//زمانی که یک کاربر انتخاب شود، کاربر مورد نظر را در مکان های مورد نظر قرار میدهد

int userAccountId = Convert.ToInt32(ddlUsers.SelectedValue);

ContactEO userAccount = new ContactEO();
if (userAccount.Select(userAccountId))
{
txtFirstName.Text = userAccount.Name;
txtLastName.Text = userAccount.Family;
txtMobile.Text = userAccount.Mobile;
lblInserted.Text = userAccount.InsertDate.ToString();
lblUpdated.Text = userAccount.UpdateDate.ToString();
}
}
}


10- و در آخر در Evant Click مربوط به دکمه حذف هم کدهای زیر را قرار می دهیم.


//عملیات حذف
protected void btnDelete_Click(object sender, EventArgs e)
{
if (ddlUsers.SelectedItem.Value != "")
{
ArrayList validationErrors = new ArrayList();
ContactEO userAccount = new ContactEO();

userAccount.Id = Convert.ToInt32(ddlUsers.SelectedValue);
userAccount.Delete();
LoadUserDropDownList();
txtFirstName.Text = "";
txtLastName.Text = "";
txtMobile.Text = "";
lblInserted.Text = "";
lblUpdated.Text = "";
lblErrorLabel.Visible = false;
lblErrorMessages.Visible = false;

}
}

11- در آخر صفحه Code Behind ما به صورت زیر می باشد

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using PersonBLL;


namespace PersonUI
{
public partial class Person : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadUserDropDownList();
}
}

//نمایش کاربران در DROPDOWN
private void LoadUserDropDownList()
{
ddlUsers.DataSource = ContactEO.SelectAll();

ddlUsers.DataTextField = "FullName";
ddlUsers.DataValueField = "Id";
ddlUsers.DataBind();

ddlUsers.Items.Insert(0, new ListItem("ایجاد کاربر جدید", ""));
}

//انجام عملیات ثبت و بروزرسانی
protected void btnSave_Click(object sender, EventArgs e)
{
ArrayList validationErrors = new ArrayList();
ContactEO userAccount = new ContactEO();

if (ddlUsers.SelectedItem.Value != "")
{
//ویرایش
userAccount.Id = Convert.ToInt32(ddlUsers.SelectedValue);
}

userAccount.Name = txtFirstName.Text;
userAccount.Family = txtLastName.Text;
userAccount.Mobile = txtMobile.Text;

userAccount.Save(ref validationErrors);

if (validationErrors.Count > 0)
{
ShowValidationMessages(validationErrors);
}
else
{
//فراخوانی دوباره DropDwon
LoadUserDropDownList();

//Select the one the user just saved.
ddlUsers.Items.FindByValue(userAccount.Id.ToString ()).Selected = true;

lblErrorLabel.Visible = false;
lblErrorMessages.Visible = false;
}
}

//نمایش پیغام ها
private void ShowValidationMessages(ArrayList validationErrors)
{
if (validationErrors.Count > 0)
{
lblErrorLabel.Visible = true;
lblErrorMessages.Visible = true;
lblErrorMessages.Text = "<br />";

foreach (string message in validationErrors)
{
lblErrorMessages.Text += message + "<br />";
}
}
else
{
lblErrorLabel.Visible = false;
lblErrorMessages.Visible = false;
}
}


protected void ddlUsers_SelectedIndexChanged(object sender, EventArgs e)
{
txtFirstName.Text = "";
txtLastName.Text = "";
lblInserted.Text = "";
lblUpdated.Text = "";

if (ddlUsers.SelectedValue != "")
{
//زمانی که یک کاربر انتخاب شود، کاربر مورد نظر را در مکان های مورد نظر قرار میدهد

int userAccountId = Convert.ToInt32(ddlUsers.SelectedValue);

ContactEO userAccount = new ContactEO();
if (userAccount.Select(userAccountId))
{
txtFirstName.Text = userAccount.Name;
txtLastName.Text = userAccount.Family;
txtMobile.Text = userAccount.Mobile;
lblInserted.Text = userAccount.InsertDate.ToString();
lblUpdated.Text = userAccount.UpdateDate.ToString();
}
}
}

//عملیات حذف
protected void btnDelete_Click(object sender, EventArgs e)
{
if (ddlUsers.SelectedItem.Value != "")
{
ArrayList validationErrors = new ArrayList();
ContactEO userAccount = new ContactEO();

userAccount.Id = Convert.ToInt32(ddlUsers.SelectedValue);
userAccount.Delete();

LoadUserDropDownList();
txtFirstName.Text = "";
txtLastName.Text = "";
txtMobile.Text = "";
lblInserted.Text = "";
lblUpdated.Text = "";
lblErrorLabel.Visible = false;
lblErrorMessages.Visible = false;

}
}

}

}

12- تا اینجا که مشکلی نبود، حالا فقط 2 تا نکته هستش که باید ConnectionStirng مربوط به Entity Framework که در web.config لایه PersonDAL هستش رو در Web.Config مربوط به پروژه PersonUI اضافه کنیم.
ConnctionStirng رو از web.config لایه PersonDAL کپی کنید و در web.config پروژه PersonUI اضافه کنید.
<connectionStrings>
<add name="PersonEntities" connectionString="metadata=res://*/PersonDataModel.csdl|res://*/PersonDataModel.ssdl|res://*/PersonDataModel.msl;provider=System.Data.SqlClient ;provider connection string=&quot;Data Source=MOHSEN-PC\SQL2008R2;Initial Catalog=Person;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

نکته دوم : انتخاب PersonUI بعنوان پروژه زمان اجرا
http://e-negin.ir/Mohsen/L/31.jpg

حالا برنامه را اجرا کنید.
http://e-negin.ir/Mohsen/L/32.jpg
دوستان در کدها هرجاش مشکلی داشتین بگین تا توضیح بدم.
پایان
نظرتون چیه دوستان؟!

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

و بزودی ==> آموزش استفاده از Entity Framework در معماری 3 لایه توسط دستورات LINQ (دیگه از SP ها استفاده نمی شه)

موفق باشید

shahab_ksh
دوشنبه 25 اردیبهشت 1391, 00:36 صبح
شما چرا برای ورود تغییرات در دیتا از Stored Procedures استفاده کردید چرا از خود Entity Frimework استفاده نکردید؟

mohsen_f_b
دوشنبه 25 اردیبهشت 1391, 08:56 صبح
شما چرا برای ورود تغییرات در دیتا از Stored Procedures استفاده کردید چرا از خود Entity Frimework استفاده نکردید؟

سلام دوست عزیز
من می خواستم کل رویه ها از طریق Stored Procedures انجام بشه. می شه تمام عملیات ها رو هم مستقیم از طریق Entity Framework انجام داد. ولی من شخصا اینطوری انجام دادم. بالا هم توضیح نوشتم این یک نمونه هستش.راه های زیادی میشه استفاده کرد. وقت بشه حتما با تغییرات برای روش های دیگر هم میزارم. شما هم اگه وقت دارین اصلاح کد به روش های دیگه هم بزارین.
باتشکر از شما دوست عزیز shahab_ksh جان

baharkarimi
دوشنبه 25 اردیبهشت 1391, 22:40 عصر
خیلی خوب و واضح توضیح دادی مرسی

arefba
جمعه 29 اردیبهشت 1391, 14:31 عصر
به نظرت وقتش نیست لایه آخر رو توضیح بدی و کل پروژه رو بزاری ؟؟

mohsen_f_b
جمعه 29 اردیبهشت 1391, 22:02 عصر
به نظرت وقتش نیست لایه آخر رو توضیح بدی و کل پروژه رو بزاری ؟؟
سلام دوست عزیز

بخش بعدی اضافه شد.
فایل پروژه اضافه شد.
موفق باشید.

TheCoder
شنبه 30 اردیبهشت 1391, 14:51 عصر
آقا من این پروژه رو درست کردم
موقع insert خطا میده

TheCoder
شنبه 30 اردیبهشت 1391, 14:54 عصر
چیزی که من درست کردم اینه

mohsen_f_b
شنبه 30 اردیبهشت 1391, 19:10 عصر
چیزی که من درست کردم اینه

سلام دوست عزیز

فکر نکنم من اینطوری که آموزش دادم شما برنامه رو طراحی کرده باشید!!!
لطفا از مثالی که گذاشتم استفاده نمایید!

موفق باشید

samadblaj
چهارشنبه 10 خرداد 1391, 11:35 صبح
دوست عزیز چرا تحت وب؟چقدر کامل و واضح بود حیف شد./

mohsen_f_b
چهارشنبه 10 خرداد 1391, 12:18 عصر
دوست عزیز چرا تحت وب؟چقدر کامل و واضح بود حیف شد./

سلام دوست عزیز
تحت ویندوز می خواستین باشه؟زیاد فرقی نداره که دوست من.
اگه می خواین براتون بنویسیم بفرستم.

موفق باشید

samadblaj
چهارشنبه 10 خرداد 1391, 15:38 عصر
یعنی این کارو میکنید !

اینجوری میفتید تو زحمت خیلی با معرفتی حالا شروع میکنم مینویسم ببینم میتونم.

mohsen_f_b
چهارشنبه 10 خرداد 1391, 20:50 عصر
حالا شروع میکنم مینویسم ببینم میتونم.

لایه های DAL و BLL همون هستن و فقط توی UI شما باید فرم ویندوزی بزنید.

موفق باشید

samadblaj
پنج شنبه 11 خرداد 1391, 09:00 صبح
نه بی خیالش اینجوری درست مفهوم رو نمیگیرم (تحت وب)

ولی بازم بایت این زحماتت تشکر میکنم.

موفق باشید

mohsen_f_b
پنج شنبه 11 خرداد 1391, 18:22 عصر
نه بی خیالش اینجوری درست مفهوم رو نمیگیرم (تحت وب)



دوست عزیز تا امشب صبر کن براتون می نویسیم میزارم برای دانلود.

موفق باشی

jafari1
دوشنبه 15 خرداد 1391, 22:46 عصر
با سلام و عرض تشکر
اگر لایه یوزر ویندوز فرم باشد بهتر است ضمنا به نظر این برنامه ساده با این روش اینقدر طولانی شده است

samadblaj
دوشنبه 15 خرداد 1391, 23:40 عصر
دوست عزیز تا امشب صبر کن براتون می نویسیم میزارم برای دانلود.

موفق باشی

جدی ! ممنونم دوست عزیز منتظرما...

zahrashoja
پنج شنبه 18 خرداد 1391, 09:47 صبح
با تشکر از شما .. میشه با استفاده از دستورات linq هم بگین این مراحل رو

و من یه مشکلی داشتم:
public List<News> selectfromnews(int idd)
{

var cell = (from row in ag.News where row.nid == idd select new {row.ndate,row.ntex});

List<News> l = cell.ToList();

return l;
}
می خوام یه select چند ستونه داشته باشم و حاصلش رو return کنم ولی توی تبدیل نوع هاش موندم... var رو که نمیشه return کرد.. و حاصل select چند ستونه رو هم نمیشه ریخت توی list....... خواهش میکنم اگه میدونی کمکم کن..من تاشهریور باید پروژمو تحویل بدم

gama_slv
سه شنبه 23 خرداد 1391, 19:30 عصر
در Ef در قسمت تنظیمات جداول قسمتی هست که سه متد Insert,Update,Delete داره و میشه روال های ذخیره شده مورد نظر خودمون رو به جداول وصل کنیم میخواستم بدونم کاربرد این قسمت چیه؟
88873
88874

mar236
دوشنبه 12 تیر 1391, 22:47 عصر
سلام... چرا از معماري 3 لايه استفاده كنيم؟ .. درسته كه اين روش نظم بيشتري داره ولي طولاني تر از حالت عاديه ...

Saber_Fatholahi
دوشنبه 19 تیر 1391, 12:16 عصر
سلام... چرا از معماري 3 لايه استفاده كنيم؟ .. درسته كه اين روش نظم بيشتري داره ولي طولاني تر از حالت عاديه ...
دوست من اگر جستجو ساده ای بکنین می بینین درسته طولانیه اما انعطاف پذیرتره

موفق وموید باشید

h_r_sh
چهارشنبه 28 تیر 1391, 00:48 صبح
مرسی بابت زحمتی که کشیدید.
اگه می شه فقط قسمت Update رو با استفاده از Linq و EntityFrameWorkDesigner.edmx توضیح بدید.

amir7ta
پنج شنبه 05 مرداد 1391, 05:19 صبح
سلام
من یه مشکلی دارم
آقا محسن هر نکته ای که گفتین رو رعایت کردم
اما موقع ثبت ،حذف، و یا هرکار دیگه ای این خطا رو میده
The data reader is incompatible with the specified 'testModel.student'. A member of the type, 'name', does not have a corresponding column in the data reader with the same name.
این store procedure که نوشتم و همونجوری که گفتین import function کردم

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[insert_student]

(
@name nvarchar,
@l_name nvarchar,
@f_name nvarchar,
@national_code nvarchar,
@sh_sh nvarchar,
@image binary(4000),
@burn_date datetime,
@burn_city nvarchar,
@class_id bigint

)

AS
SET NOCOUNT ON

insert into student
([name],l_name,f_name,burn_date,national_code,sh_sh,[image],burn_city,class_id)
values
(@name,@l_name,@f_name,@burn_date,@national_code,@ sh_sh,@image,@burn_city,@class_id)

RETURN

تمام sp ها همین خطا رو میدن
تمام عملیات روی تمام جدول ها
ببینید insert رو انجام میده اطلاعات توی جدول ثبت میشه اما این خطا رو میده و برنامه متوقف میشه
اول فکر کردم به اسم فیلد گیر داده که اونو عوض کردم بازم همین خطا رو میداد و برای هر جدول با هر اسمی با هر نوع فیلدی همین خطا رو میده بجای 'name' اسم فیلد رو مینویسه
فقط هم فیلد اول هر جدول رو میگه ، مثلا توی پیغام خطای بالا فیلد نام اولین فیلد جدول student بود
مثل اینکه در مورد نوع مقدار بازگشتی از جدول خطا داده، کد هم به این شکل تعریف شده

public static student Insert_student(string name, string l_name, string f_name, string national_code, string sh_sh, byte[] image, DateTime burn_date, string burn_city, Int64 class_id)
{
testEntities db = new testEntities ();
return db.insert_student(name, l_name, f_name, national_code, sh_sh, image, burn_date, burn_city, class_id).ElementAt(0);
}

student در کد بالا entity هست که توی مثال شما entity همان contact بود

ممنون میشم اگر کسی کمک کنه،

nilda_15
جمعه 06 مرداد 1391, 18:30 عصر
سلام
این برنامه رو با مراحل گفته شده در قسمت آموزش انجام دادم و برنامه درست جواب میدهد
البته واسه منم فقط دستور ذخیره خطا میداد به قول آقای amir7ta (http://barnamenevis.org/member.php?168491-amir7ta) اطلاعات رو ذخیره میکنه و لی خطا میداد
من اومدم پروکسیجر مربوط به دستور ذخیره رو بدون خروجی کردم در کد نویسی هم توابع مربوط به درج اطلاعات رو بدون خروجی (Return) کردم
با این کار اطلاعات ذخیره میشود و هیچ خطایی رخ نمیدهد

amir7ta
سه شنبه 10 مرداد 1391, 00:57 صبح
منم مجبور شدم بجای return از select استفاده کنم و اینجوری مشکل حل شد ،مثلا بعد از پروسیجر insert ، رکورد ثبت شده رو با select برمیگردونم و دیگه برای پروسیجرهای insert و update مشکل نداره
اما برای delete چون مجبورم یه مقدار برگردونم باید از return استفاده کنم و هنوز مشکل پا برجاست آخه سطر حذف شده رو که نمیتونم با select برگردونم و باید یه پارامتر return کنم که ببینم sp اجرا شده یا نه.
دقیقا هم میدونم مشکل کجاس اما نمیتونم حلش کنم
موقعی که توی مدل داریم فانکش میسازیم و sp ها رو import میکنیم ، اونجایی که نوع پارامتر بازگشتی از sp رو مشخص میکنیم اگر پارامتر بازگشتی با return باشه خطا ایجاد میشه اما اگه خروجی sp یه سطر از جدول باشه درواقع یک entity باشه دیگه خطایی نمیده امیدوارم کسی بتونه کمک کنه

zahrashoja
چهارشنبه 11 مرداد 1391, 01:25 صبح
میشه بطور خلاصه و جمع شده بگین چه قسمت هایی در کدوم لایه قرار می گیرن البته بدون استفاده از store procedure

zare69
شنبه 14 مرداد 1391, 08:14 صبح
سلام دوستان
من تمام این مراحل گفته شده را انجام دادم ولی زمانی که می خواهم یه سطر جدید در بانک ایجاد کنم خطا زیر را میدهد.کسی میتونه منو راهنمایی کنه.
البته لازم به ذکر که من این مراحل را در سی شارپ انجام دادم.

90703

zare69
شنبه 14 مرداد 1391, 08:22 صبح
من چند تا سوال داشتم در مورد این روش:
1-اگر ما چند تا جدول در بانک داشته باشیم به ازای هر کدام باید تمام این مراحل را انجام بدیم ؟و برای هر کدوم 5 تاSPایجاد کنیم؟:متعجب:
2-اگر بخواهیم ی تغییری در جداول انجام بدیم برای اعمال کردن تغییرات به مراحل دیگر دستی باید این کار را انجام بدیم؟:متعجب:
3-در این صورت مزیت این روش چیه؟چون هم انجام دادن این مراحل زمانبر و وقت گیره وهم برای اعمال ی تغییر کوچیک دوباره از اول باید شروع به کار کرد.:متفکر:

amir7ta
سه شنبه 17 مرداد 1391, 01:08 صبح
سلام دوستان
من تمام این مراحل گفته شده را انجام دادم ولی زمانی که می خواهم یه سطر جدید در بانک ایجاد کنم خطا زیر را میدهد.کسی میتونه منو راهنمایی کنه.
البته لازم به ذکر که من این مراحل را در سی شارپ انجام دادم.

90703

فایل app.config رو از لایه dal به لایه ui اضافه کن درست میشه

starwold
پنج شنبه 30 شهریور 1391, 12:34 عصر
سلام و خیلی ممنون از شما بابت این منبعی که برای آشنایی بهتر برای ما گذاشتید

میخواستم از شما اگه میتوانید برای آپلود نمودن عکس و ذخیره کردن در دیتا بیس کد سی شارپشو برامون بزارید یا لینکی که کمکمون کنه

ممنون

starwold
پنج شنبه 30 شهریور 1391, 14:16 عصر
سلام من این پروژه رو اجرا نمودم ولی برای من خطا صادر میکند میتونین برای رفع خطا به من کمک کنید ممنون
93139

pikoolas
جمعه 21 مهر 1391, 17:51 عصر
انشالله که بدردتون خورده باشه.بازم شرمنده اگه کوتاهی کردم.

و بزودی ==> آموزش استفاده از Entity Framework در معماری 3 لایه توسط دستورات LINQ (دیگه از SP ها استفاده نمی شه)

موفق باشید
دوستان کسی تو این زمینه میتونه راهنمایی بکنه.

b.najafi_1387
چهارشنبه 17 آبان 1391, 00:57 صبح
میشه خواهش کنم همین پروژه رو تحت ویندوز ( با EntityFrameWork و معماری 3 لایه) بزارید؟ خیلی سرچ کردم اما چیز جالبی پیدا نکردم ؛ توضیحات شما خیلی کامله ؛ممنون

f.rahdar
سه شنبه 30 آبان 1391, 10:26 صبح
دوستان لطفا بیشتر توضیح بدید برای رفع مشکل جکار کنیم؟کجاهاreturn رو برداریمselect بزاریم؟؟؟؟؟؟؟؟؟

آقا محسن 1زحمت دیگه بکشید و برای حل مشکل راهنمایی کنید.ممنون

farzaneh66
پنج شنبه 09 آذر 1391, 21:16 عصر
سلام من این پروژه رو اجرا نمودم ولی برای من خطا صادر میکند میتونین برای رفع خطا به من کمک کنید ممنون
93139



به من هم همین خطا رو میده !!

yhsoft
چهارشنبه 29 آذر 1391, 12:05 عصر
برنامه ای که را دانلود گذاشتین اجرا نمیشه ؟؟؟
چیکار باید کرد؟؟/

mosadatta
جمعه 01 دی 1391, 12:08 عصر
با تشکر
من هم در زمان درج خطا میده
و برنامه اصلی هم خظای زیر را میده

malloc
یک شنبه 03 دی 1391, 18:32 عصر
خوب از دوستان کمال تشکر رو دارم :بامزه:
منم به خطایی که در پست 29 گفتن خوردم و راحلی که در پست 31 گفتن رو هم تست کردم اما درست نشد.

مسئولین این تاپیک مشکلات و رسیدگی کنن لطفا

bormohsen
جمعه 15 دی 1391, 22:44 عصر
3 layer Generator

نرم افزاری جهت تولید خودکار لایه های برنامه های تجاری

در سایت مهندس محسن مدحج


www.howprg.com (http://www.howprg.com/)

برنامه نویس مهندس نادر غریبیان فرد

mohsen406
چهارشنبه 25 بهمن 1391, 14:25 عصر
با سلام
محسن جان آموزش خیلی جالبی گذاشتی خیلی خوب بومنم دارم واسه پیاده سازی یک پروژه از entity framework استفاه می کنم.
یم مشکلی دارم که چند تا راه حل داره به نظر تو راه حل خوبش کامه؟
من تو لایه UI نمیتوانم ابجکت ها را ببینم چون لایه DAL را نمیبینه. به نظرت چیکار کنم که به طور مثال بتونم تو لایه DAL یک آبجکت که لایه های پایینی ایجاد کردند را ببینم؟

fa_karoon
چهارشنبه 25 بهمن 1391, 20:02 عصر
سلام ممنون از آموزش خوبتون، ولی چرا عکس های صفحه اول برای من نمیاد هر جا گفتین به تصویر زیر دقت کنین تصویرش برای من نیست:ناراحت:

fa_karoon
چهارشنبه 09 اسفند 1391, 18:47 عصر
سلام چرا این تاپیک دیگه پیگیری نمی شه، خیلی مطلب مفیدی بود دست همه درد نکنه

sahar15125
چهارشنبه 16 اسفند 1391, 17:52 عصر
ن چطور توی یک پروژه وب ازون استفاده کنم؟
میشه یه نفر منو راهنمایی کنم من سریعا لازمه که اینکارو روی یه پروژه وب ساده انجام بدم
ممنون

mojtabaa1975
شنبه 07 اردیبهشت 1392, 17:32 عصر
سلام
ضمن تشکر از مطالب مفیدتون ، بنظر میرسه Image ها باز نمیشن (حتی با راست کلیک و ShowPicture)
ممکنه کمکم کنید ، اگه امکان داره تصاویر رابرام بفرستین
ممنون

fa_karoon
سه شنبه 10 اردیبهشت 1392, 18:48 عصر
سلام دوستان، لطفا من رو راهنمایی کنید.
آیا در وب استفاده از این روشی که در این تاپیک یاد دادشده بهتر هست یعنی استفاده از store Procedure ها، یا اینکه می توانیم بدون استفاده از store Procedure ها
و با کد نویسی معمولی در صفحاتمون هم Entity Frame Work رو پیاده سازی کنیم؟
می خوام بدونم کدوم راهش اصولی تر و امن تر هست؟ ممنون از وقتی که می گذارید.

fa_karoon
چهارشنبه 05 تیر 1392, 19:04 عصر
دوستان سلام
آیا از همین روشی که اینجا یاد داده برای ویندوز هم می شه استفاده کرد؟

toojaldey
شنبه 15 تیر 1392, 13:12 عصر
سلام ممنون بابت مطالب خوبتون ولی عکسهای آموزشی باز نمیشود

hodaalimi
شنبه 19 مرداد 1392, 12:10 عصر
سلا م عکس هایی که توضیحات رو گذاشتین باز نمی شن

mina.nafari
دوشنبه 21 مرداد 1392, 16:28 عصر
با سلام
آقای mohsen_f_b شما لطف کردید و مطالب رو گذاشتید، ممنون از شما دوست عزیز. لطفا جهت وضعیت تصاویری که قابل رویت نیست، زحمتی رو متحمل بشید . با تشکر

ferdin
دوشنبه 21 مرداد 1392, 22:03 عصر
با سلام
محسن جان آموزش خیلی جالبی گذاشتی خیلی خوب بومنم دارم واسه پیاده سازی یک پروژه از entity framework استفاه می کنم.
یم مشکلی دارم که چند تا راه حل داره به نظر تو راه حل خوبش کامه؟
من تو لایه UI نمیتوانم ابجکت ها را ببینم چون لایه DAL را نمیبینه. به نظرت چیکار کنم که به طور مثال بتونم تو لایه DAL یک آبجکت که لایه های پایینی ایجاد کردند را ببینم؟


توی لایه UI چه نیازی داری که آبجکتهای مدل رو ببینی؟
شما میتونی یک لایه بین dal و ui داشته باشی به نام dto.
dto کلاسهایی هست که یک سری پراپرتی که معادل فیلدهای جداول یا .. هست .

orca13
پنج شنبه 24 بهمن 1392, 12:53 عصر
دوستان روش استفاده نکردن از SP چجوری هستش؟
میشه یه توضیح بدید؟

saramigmigmig
جمعه 30 خرداد 1393, 00:21 صبح
اگه نخواهیم از استورپروسیجر استفاده کنیم دیگه در لایه dal فقط فایل edmx را خواهیم داشت؟ دیگه چیزی به عنوان class library نداریم؟

RK977877
پنج شنبه 26 تیر 1393, 11:42 صبح
با سلام
میشه متد() SelectAll مربوط به کلاس ContactEO رو بیشتر توضیح بدبد من متوجه نشدم
مرسی

mehregan
یک شنبه 26 مرداد 1393, 02:37 صبح
در صورت امکان آموزش را بصورت یک فایل pdf قرار دهید.

leila94
سه شنبه 01 اردیبهشت 1394, 22:58 عصر
در پست اول هنگام add کردن sp ها گفتن با توجه به عکس stored prosedure insert رو اد کنید دقت کنید چون آیدی برمیگردونه با باقی sp ها فرق میکنه ولی عکس موجود نیست.
لطفا توضیح دهید که برای اد کردن insert و الباقی باید چکار کنم , عکس موجود نیست :افسرده:
ممنون

bahar_engineer
یک شنبه 27 تیر 1395, 20:15 عصر
سلام دوستان عزیز
نمی دونم بخش اول آموزش چطور بود.
ببخشید که کمتر توضیح دادم، سعی کردم همش با عکس باشه که درکش راحت تر باشه.

ادامه دارد ...

سلام خوبین
مرسی از آموزش خوب و کاملتون
استفاده از عکس ایده خوبی بود اما الان عکس ها باز نمی شن و نمی شه از آموزش استفاده کرد، متاسفانه
عکس ها رو دارید ؟:افسرده:

h1and1saman
شنبه 29 دی 1397, 02:09 صبح
آموزش خوبی بود ولی حیف عکس ها باز نمیشد