# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > دسترسی به داده ها (ADO.Net و LINQ و ...) > آموزش: آموزش قدم به قدم اعمال اصلی با entity framework

## firoozi90

در این تایپیک قصد دارم entity framework را بصورت کاملا کاربردی براتون توضیح بدم. 
و تا حدودی تایپیک کاملا متفاوتی از تایپیک های مشابه در اینجا داشته باشیم.
از یه مقدمه برای این موضوع شروع می کنم و دوستان اگر استقبال کنند و به ما انگیزه بدهند اعمال اصلی را بصورت کاربردی قدم به قدم براتون می گم.
*
 مقدمه اي در مورد entity framework*
entity framework یک فریم ورک ORM برای دات نت فریم ورك است که نسخه یک آن به همراه دات نت فریم ورك 3.5 سرویس پک 1 عرضه شد اما مورد استقبال توسعه دهندگان قرارنگرفت. نسخه 2 این فریم ورك به صورت بتا به عنوان بخشی از ویژوال استادیو 2010 قابل دسترس است ADO.NET Entity Framework. نام اصلی این فریم ورك است و جزئی از تکنولوژی ADO.NET است.
ابزار طراحی Entity Framework در ویژوال استادیو Entity Framework مدل رابطه اي موجود در یک دیتابیس را به مدل مفهمومی تبدیل می کند و آن را به اپلیکیشن ما تحویل می دهد. در مدل رابطه اي عناصر ترکیبی از جداول هستند، به همراه کلید هاي اصلی و خارجی که جدول ها را به هم مرتبط می سازند. برعکس آن، انواع موجودیت ها مدل مفهومی داده را تعریف می کنند. انواع موجودیت اجتماعی از چند فیلد است و می تواند شامل اطلاعات از چند جدول فیزیکی باشد .
انواع موجودیت می توانند به هم مرتبط باشند، مستقل از ارتباطاتی که در مدل فیزیکی دارند شماي منطقی و نگاشت آن به شماي فیزیکی به عنوان یک Entity Data Model یا EDM نمایش داده می شوند که مشخصات EDM در یک فایل XML ذخیره می شود.
entity framework از EDM برای براي انجام عملیات نگاشت و دادن قابلیت کار با موجودیت ها به اپلیکیشن استفاده می کند .
Entity Framework اطلاعات مورد نیاز هر موجودیت را با Join کردن چندین جدول از مدل فیزیکی (دیتابیس) بدست می آورد هنگامی که اطلاعات یک موجودیت آپدیت می شود entity framework بررسی می کند که داده ها مربوط به کدام یک از جدول هاي موجود در دیتابیس هستند، سپس آن ها را با دستور SQL مناسب آپدیت می کند.

----------


## firoozi90

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

برای دانلود روی لینک راست کلیک کنید و save target az یا save link az بزنید
*

----------


## firoozi90

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

به عنوان مثال کد زیر را در رویداد لود فرم بنویسید:

 testEntities db = new testEntities();
    dataGridView1.DataSource=db.student.Select(p=>p);


testEntites نام اتصال پایگاه داده تون هست
student نام جدوله

دوستان اگر استقبال نکنند دیگه ادامه نمی دم

----------


## firoozi90

_کد اضافه کردن اطلاعات به جدول با entity framework_

testEntities db= new testEntities();
student st = new student();
st.stid = textBox1.Text;
st.name = textBox2.Text;
st.famil = textBox3.Text;
  st.avg =Convert.ToDouble(textBox4.Text);
  db.AddTostudent(st);
db.SaveChanges();

----------


## firoozi90

_کد جستجو با entity framework_

*کدجستجو بر اساس یک فیلد خاص( بر اساس شماره دانشجویی)*

string id = textBox8.Text.Trim();
testEntities db = new testEntities();
dataGridView1.DataSource = db.student.Where(p => p.stid == id);
textBox8.Clear();


*
کد جستجو بین دو فیلد خاص(بین دو معدل)
*
double stavg =Convert.ToDouble(textBox5.Text);
double enavg = Convert.ToDouble(textBox10.Text);
testEntities db = new testEntities();
dataGridView1.DataSource = db.student.Where(p => p.avg>=stavg && p.avg<=enavg);

----------


## firoozi90

_آموزش ویرایش در entity framework_
برای این قسمت به تایپیک زیر سر بزنید
* آموزش ویرایش اطلاعات با  Entity framework*

----------


## vahidpur

سلام  firoozi90   

من جدیدا به این مبحث علاقه مند شدم و میخوام بقیه پروژه هامو به این روش ادامه بدم

ولی اصلا اطلاعات زیادی در موردش ندارم ای کاش شما به آموزشتون ادامه بدین

   بازم ازتون ممنونم

----------


## firoozi90

> سلام  firoozi90   
> 
> من جدیدا به این مبحث علاقه مند شدم و میخوام بقیه پروژه هامو به این روش ادامه بدم
> 
> ولی اصلا اطلاعات زیادی در موردش ندارم ای کاش شما به آموزشتون ادامه بدین
> 
>    بازم ازتون ممنونم


سلام
متاسفنه دوستان همکاری نمی کنند.شما می تونید به تایپیک زیر برید
* دانلود کتاب های آموزشی LINQ*

----------


## m110_110

سلام
ممنون از نكاتي گه گذاشتيد
اما حداقل براي من مشكلات بيشتر بعد از به كارگيري ef در پروژه ها شروع شد
و همان اول كار، با سوالاتي مواجه شديم كه تاكنون هم جواب درستي براش پيدا نكرديم
و نزديك ده روز هم در اين تالار سوال گذاشتيم و ولي خبري نيست
ممنون مي شم اگر در اين زمينه تجربه اي داريد به زبان ساده در اختيار ما هم قرار بدهيد
اگر هم اموزشتون را ادامه بدهيد خيلي عاليه است
https://barnamenevis.org/showthread.php?328890-%D8%
https://barnamenevis.org/showthread.php?329365-%D8%AA%D8

با تشكر

----------


## fahimi

لطفا حذف رکورد را هم شرح دهید

----------


## davoodfa

لطفا ادامه بدید مطالب مفید وبسیار قابل توضیح داده شده

----------


## samadblaj

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

----------


## uniqueboy_ara

> لطفا حذف رکورد را هم شرح دهید


با فرض اینکه جدول مورد نظر ما tbl_x بوده و کلید جدول ID باشد و ID رکورد مورد نظر ما Number باشد، کد حذف به صورت زیر خواهد بود:

using( var contex = new testEntities())
{
var SelectedItem = contex.tbl_x.where(M=>M.ID==Number).First();
contex.deleteobject(SelectedItem);
contex.savechanges();
}

----------


## samadblaj

*سلام ممنونم از توضیحاتتون میشه یه فایل به صورت پروژه ساده بذارید.*

----------


## uniqueboy_ara

اینم یه پروژه ساده که 4 عمل اصلی رو با کمک LINQ و EF داخلش پیاده سازی کردم
هرجاش که گنگ بود بگید تا راهنمایی کنم :)
دیتابیس: SQL compact

EF_LINQ_TEST.rar

----------


## mina0r0

سلام . من متوجه نشدم از این فایل آموشی چطور استفاده کنم. میشه لطفا راهنمایی کنید ؟ ممنون

----------


## samadblaj

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

1 - دلیل رخ دادن این خطا چیه؟


2 - این چند تا خطا در هنگام اجرا رخ دادن، نیاز هست بانک اطلاعات رو اتچ کرد؟ لطفا مبتدی توضیح بدید.


3 - رمز دیتا رو شما گذاشتید؟ ببخشید چند؟

----------


## uniqueboy_ara

پسوورد دیتابیس arasoft هستش
در مورد اررورها فکر کنم که مشکل از ورژن ها باشه، من این پروژه رو با Visual Studio 2010 Sp1 نوشتم و خیلی از باگ هایی که توی EF وجود داشت توی SP1 ترمیم شده! احتمالا واسه همینه که مدلو نمیشناسه!

----------


## SaeidMirzaei

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

----------


## zahrashoja

> _کد جستجو با entity framework_
> 
> *کدجستجو بر اساس یک فیلد خاص( بر اساس شماره دانشجویی)*
> 
> string id = textBox8.Text.Trim();
> testEntities db = new testEntities();
> dataGridView1.DataSource = db.student.Where(p => p.stid == id);
> textBox8.Clear();
> 
> ...



ممنون
اگه بخوام بعد از جستجو توی گرید ویو فقط فیلد های خاصی نشون داده بشه چطوری بنویسمش؟؟؟؟

----------


## farshadvl

مرسی فیروزی جان کارت 20

----------


## sunboymn

> با فرض اینکه جدول مورد نظر ما tbl_x بوده و کلید جدول ID باشد و ID رکورد مورد نظر ما Number باشد، کد حذف به صورت زیر خواهد بود:
> 
> using( var contex = new testEntities())
> {
> var SelectedItem = contex.tbl_x.where(M=>M.ID==Number).First();
> contex.deleteobject(SelectedItem);
> contex.savechanges();
> }



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




testEntities dbtest = new testEntities();
tbl_test tbl = new tbl_test();
tbl=dbtest.tbl_test.where( p => p.Name==textnox1.text).first();
dbtest.DeleteObject(tbl);
dbtest.SaveChanges();

----------


## uthman

سلام .پروژه Entity Frame work

:تشویق:

----------


## m,h,rastgoo

ببخشد اگه بخوام  وقتی درج انجام میشه اگه یکی از فیلد هایی که باید پر بشه  usernameباشه, جطور میشه کدی نوشت که  اگه این شخص موجود نبود در دیتابیس اون وقت درج کنه اکه موجود بود ثبت نشه

----------


## vahidth

کاش بصورت فیلم آموزشی یاد میدادین 4 عمل اصلی رو

----------


## uthman

سلام .در رویداد کلیک دکمه مربوطه کد زیر رو بنویس
using (var context=new studentEntities1())
            {
                var quer = context.users.Where(a=>a.Name==txtname.Text);
                if (quer.Count() == 0)
                {
                    user u1 = new user();
                    u1.Name = txtname.Text;
                    u1.Family = txtfamily.Text;
                    u1.Age = txtage.Text;
                    u1.Address = txtaddress.Text;
                    context.users.AddObject(u1);
                    context.SaveChanges();
                }

                else
                {
                    MessageBox.Show("کاربری با این نام موجود می باشد");
                }

            }
user:اسم جدول
اگه سوالی داشتی در خدمتم

----------


## uthman

به زودی این کار رو انجام می دم و توی سایتم میگذارم.وقتی تم.مش کنم خبر میدم.

----------


## m,h,rastgoo

سلام واقعا دستتون درد نکنه

----------


## m,h,rastgoo

سلام  
 ایا میشه با entity framworkگزارش گیری کرد؟ چطور؟
من ویژوال استدیو 2012 نصب دارم  ولی کریستال ریپورت داخلش نیست. خود کریستال ریپورت رو از سایتی دانلود کردم میگه مخصوص ویژوال 2010است و خود ویژوال استدیو2012 کریستال ریپورت رو داره میشه لطف کنیدبگین چطوری باید بیارمش

----------


## m,h,rastgoo

سلام من با entity framework برنامه ای نوشتم حالا میخوام با استفاده از circular Progress(زمان load) کاری کنم که پر شدن درصد circular Progress بستگی داشته باشه  به اینکه چقدر اطلاعات داخل databaseباشه یعنی  زمان پر شدن درصد به اطلاعات بستگی داشته باشه  

سوال بعد من اینه که چطور میشه در entity framework مثلا اگر ستونی در دیتابیس به نام بدهکار داریم به همه ی عناصر فقط همین ستون دسترسی داشته باشیم تا بتونیم این ها رو ویرایش کنیم

----------


## m,h,rastgoo

سلام سوالاتی که پرسیدم رو می شه جواب بدین کارم گیره

----------


## likemoon

چطوری میشه با استفاده از linq  ستونهایی رو که در گرید ویو نمایش داده میشه محدود کرد؟؟؟؟ چون همیشه که نمیخوایم تمام ستون ها رو نمایش بدیم! همینطور در مورد کمبوباکس و ...
و چطوری میشه اسم ستون ها رو تغییر داد

----------


## uthman

سلام و قتی select  میکنی جلوش یه  new  بنویس و داخل{} اسم فیلد ها تو بنویس.
اگه نفهمیدی بگو تا یه نمونه برات بذارم.

----------


## uthman

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

prog1.maximum=20;
using(var context=new student())
{
var query=context.users.name;
foreach(var name in query)
{
prog1.value+=1;
}
}


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

----------


## m,h,rastgoo

سلام دستت درد نکنه از کد بالا ولی این ارور میده منظورم ترد بندیcircular Progress2 هست

----------


## uthman

سلام.پروژه زیر رو دانلود کن احنمالا کارتو راه بندازه.
به لینک زیر هم یه نگاهی بنداز
http://www.codeproject.com/KB/vb/sql...rprogress.aspx

----------


## hakan648

در dotnettips.info بهترین آموزش های فارسی Entity Framework توسط جناب وحید نصیری  آموزش داده شده اند و نکات و مسائل خیلی گسترده ای هم توسط ایشون و دوستان دیگه مطرح شده اند، فیلم آموزشی، کتاب و ... قرار داده شده است و میتونید از اونها استفاده کنید.
_کاری که کردید_ خیلی خوب هست، اما توصیه میکنم _کار تکراری_ انجام ندید و تمرکز رو بزارید بروی قسمت هایی که شاید پوشش داده نشده اند. مثلا چند  پروژه ی کامل و کاربردی ارائه کنید، ترفند ارائه کنید، از تجربیاتتون بگید و ...
وگرنه که مباحث مقدماتی و پیشرفته و نکات بسیار خوبی در سایتی که عرض کردم ارائه شده اند.

----------


## m,h,rastgoo

سلام می شه در مورد گزارش گیری با کریستال ریپورت در entity framwork توضیح بدین اگه امکانش هست یک برنامه در این مورد قرار بدین

----------


## sasanazizi2

با سلام و تشکر برای مطالب مفید و پرکاربردتون .
ببخشید برای insert کردن این کاری که گفتین انجام نمیشه !  یعنی راستش اصلا addtostudent رو نمیاره برام !
لطفا راهنمایی کنید.

----------


## uthman

> با سلام و تشکر برای مطالب مفید و پرکاربردتون .
> ببخشید برای insert کردن این کاری که گفتین انجام نمیشه !  یعنی راستش اصلا addtostudent رو نمیاره برام !
> لطفا راهنمایی کنید.


سلام.اگه کد ها رو کپی کردی باید بجای syudent نام جدول خودت رو بنویسی. و اگر هم کل پروژه رو گرفتی دیتا بیس رو چک کن.

----------


## v.kermani

p=>p چکار میکنه؟
اگه نذاریمش چی میشه؟

----------


## elham_s20

> p=>p چکار میکنه؟
> اگه نذاریمش چی میشه؟


 دوست عزیز نذاری فرقی نمی کنه
GridView1.DataSource = ctx.Users();
این کد بت همه ی رکورد ها رو میده
 اما اینو یاد بگیری خوبه با این کار می تونی یه select بزنی به این شکل 
 //GridView1.DataSource = ctx.tabelname.Where(x => x.id == 4);
الان رکوردی که ای دی ان برار 4 باشه بت می ده
 ctx  اسم مدله
tabelname اسم جدوله

----------


## firoozi90

> دوست عزیز نذاری فرقی نمی کنه
> GridView1.DataSource = ctx.Users();
> این کد بت همه ی رکورد ها رو میده
>  اما اینو یاد بگیری خوبه با این کار می تونی یه select بزنی به این شکل 
>  //GridView1.DataSource = ctx.tabelname.Where(x => x.id == 4);
> الان رکوردی که ای دی ان برار 4 باشه بت می ده
>  ctx  اسم مدله
> tabelname اسم جدوله


p=>p دستور Linq از نوع لامبدا هستش که همه رکوردهای جدولت را بر می گردونه.به روشی که دوستمون گفتن می تونید ازش استفاده نکنید.اما زمانی که بخواین از شرط استفاده کنید حتما باید از این دستور استفاده کنی.در واقع باید همه رکوردها را بکشی بیرون بعد از توی اونها اون رکورد خاص را پیدا کنی.
در ضمن p یک متغیر هستش و شما می تونید به جای اون از هر متغیر دیگه ای استفاده کنی

----------


## morika

سلام جناب فیروزی
من تمام مراحل شما رو اجرا کردم و این کد رو نوشتم:
PersepliosEntities de = new PersepliosEntities();
            dataGridView1.DataSource = de.Players.Select(p => p);
اما زمان لود کردن اطلاعات داخل grid این پیغام رو میده:
An unhandled exception of type 'System.NotSupportedException' occurred in EntityFramework.dll

Additional information: Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery, DbRawSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList().

----------


## firoozi90

> سلام جناب فیروزی
> من تمام مراحل شما رو اجرا کردم و این کد رو نوشتم:
> PersepliosEntities de = new PersepliosEntities();
>             dataGridView1.DataSource = de.Players.Select(p => p);
> اما زمان لود کردن اطلاعات داخل grid این پیغام رو میده:
> An unhandled exception of type 'System.NotSupportedException' occurred in EntityFramework.dll
> 
> Additional information: Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery, DbRawSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList().


سلام دوست عزیز
اگر از visual studio 2012 استفاده می کنید (net framework 4.5 به بالا) باید اینطوری بنویسی

PersepliosEntities de = new PersepliosEntities();
            dataGridView1.DataSource = de.Players.Select(p => p).tolist();
اما زمان

----------


## p.mohammad

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

----------


## ciscozagros

سلام به دوستان عزیز
من یه مشکلی دارم با درج اطلاعات
از try  و catch استفاده میکنم اگه در ورود اطلاعات خطا باشه مسیج رو نوشون میده ولی دیگه نمیشه اطلاعات رو دوباره اصلاح کرد باید برنامه رو ببندی دوباره وارد کنیددر هر صورت وقتی دکه رو میزنی فقط مسیج رو نشون میده             try            {
                madrak m = new madrak
                {
                    code_madrak = byte.Parse(code.Text),
                    madark = maghta.Text,
                    reshteh = reshte.Text
                };
                database.madraks.AddObject(m);
                database.SaveChanges();
                show();
            }
            catch
            {
                MessageBox.Show("خطا در ورود اطلاعات");
            }

----------


## titrajh

سلام 
چجوری میتونم 
محتویات بدست اومده از Entity fremwork رو که مثلا یک داده بخصوص هست رو داخل text box  قرار بدم ؟



(DataGridView1.DataSource = db1.Sellectone(TextBox1.Text



اینیم پروسیجرم هست 


CREATE PROCEDURE [dbo].[Sellect_Gozaresh]
@paianeh varchar(MAX)
As
Begin
    Select
	 [نام فروشگاه]
    FROM g where [شماره پایانه]=@paianeh
End

----------


## titrajh

کسی نبود کمکم کنه ؟

----------

