View Full Version : آموزش: آموزش قدم به قدم اعمال اصلی با entity framework
firoozi90
دوشنبه 01 اسفند 1390, 00:52 صبح
در این تایپیک قصد دارم 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
دوشنبه 01 اسفند 1390, 20:28 عصر
خب حالا می خوام توی یه فایل آموزشی نحوه ی اتصال پایگاه داده به سی شارپ رو بگم.
فایلو دانلود کنید و اگر سوالی داشتین من در خدمتم
دانلود فایل آموزشی (http://mfiroozi66.persiangig.com/conectdatabasetoproje.docx)
برای دانلود روی لینک راست کلیک کنید و save target az یا save link az بزنید
firoozi90
سه شنبه 02 اسفند 1390, 19:56 عصر
بعد از اتصال پایگاه داده به پروژه حالا می خوام براتون کد بسیار ساده مشاهده اطلاعات یک جدول رو بزارم
به عنوان مثال کد زیر را در رویداد لود فرم بنویسید:
testEntities db = new testEntities();
dataGridView1.DataSource=db.student.Select(p=>p);
testEntites نام اتصال پایگاه داده تون هست
student نام جدوله
دوستان اگر استقبال نکنند دیگه ادامه نمی دم
firoozi90
چهارشنبه 03 اسفند 1390, 10:54 صبح
کد اضافه کردن اطلاعات به جدول با 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
پنج شنبه 04 اسفند 1390, 13:47 عصر
کد جستجو با 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
یک شنبه 07 اسفند 1390, 00:39 صبح
آموزش ویرایش در entity framework
برای این قسمت به تایپیک زیر سر بزنید
آموزش ویرایش اطلاعات با Entity framework (http://barnamenevis.org/showthread.php?329518-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88%DB%8C%D8%B1%D8%A7%DB%8C%D8%B4-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D8%A7-Entity-framework)
vahidpur
دوشنبه 15 اسفند 1390, 11:23 صبح
سلام firoozi90
من جدیدا به این مبحث علاقه مند شدم و میخوام بقیه پروژه هامو به این روش ادامه بدم
ولی اصلا اطلاعات زیادی در موردش ندارم ای کاش شما به آموزشتون ادامه بدین
بازم ازتون ممنونم
firoozi90
دوشنبه 15 اسفند 1390, 15:50 عصر
سلام firoozi90
من جدیدا به این مبحث علاقه مند شدم و میخوام بقیه پروژه هامو به این روش ادامه بدم
ولی اصلا اطلاعات زیادی در موردش ندارم ای کاش شما به آموزشتون ادامه بدین
بازم ازتون ممنونم
سلام
متاسفنه دوستان همکاری نمی کنند.شما می تونید به تایپیک زیر برید
دانلود کتاب های آموزشی LINQ (http://barnamenevis.org/showthread.php?330200-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D8%AA%D8%A7%D8%A8-%D9%87%D8%A7%DB%8C-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-LINQ)
m110_110
سه شنبه 16 اسفند 1390, 08:02 صبح
سلام
ممنون از نكاتي گه گذاشتيد
اما حداقل براي من مشكلات بيشتر بعد از به كارگيري ef در پروژه ها شروع شد
و همان اول كار، با سوالاتي مواجه شديم كه تاكنون هم جواب درستي براش پيدا نكرديم
و نزديك ده روز هم در اين تالار سوال گذاشتيم و ولي خبري نيست
ممنون مي شم اگر در اين زمينه تجربه اي داريد به زبان ساده در اختيار ما هم قرار بدهيد
اگر هم اموزشتون را ادامه بدهيد خيلي عاليه است
http://barnamenevis.org/showthread.php?328890-%D8% (http://barnamenevis.org/showthread.php?328890-%D8%A7%D8%B1%D8%AB-%D8%A8%D8%B1%D9%8A-%D9%88-Mapping-%D8%AF%D8%B1-Entity-Framework)
http://barnamenevis.org/showthread.php?329365-%D8%AA%D8 (http://barnamenevis.org/showthread.php?329365-%D8%AA%D8%A8%D8%AF%D9%8A%D9%84-%D9%8A%D9%83-function-%D8%AF%D8%B1-sql-%D8%A8%D9%87-%D9%85%D8%B9%D8%A7%D8%AF%D9%84-linq)
با تشكر
fahimi
چهارشنبه 30 فروردین 1391, 18:28 عصر
لطفا حذف رکورد را هم شرح دهید
davoodfa
سه شنبه 05 اردیبهشت 1391, 17:52 عصر
لطفا ادامه بدید مطالب مفید وبسیار قابل توضیح داده شده
samadblaj
جمعه 08 اردیبهشت 1391, 19:19 عصر
سلام آقای فیروزی خیلی خوب هستند خیلی خوبه همینطور پیش برید.
uniqueboy_ara
دوشنبه 11 اردیبهشت 1391, 19:26 عصر
لطفا حذف رکورد را هم شرح دهید
با فرض اینکه جدول مورد نظر ما 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
سه شنبه 12 اردیبهشت 1391, 15:17 عصر
سلام ممنونم از توضیحاتتون میشه یه فایل به صورت پروژه ساده بذارید.
uniqueboy_ara
چهارشنبه 13 اردیبهشت 1391, 22:57 عصر
اینم یه پروژه ساده که 4 عمل اصلی رو با کمک LINQ و EF داخلش پیاده سازی کردم
هرجاش که گنگ بود بگید تا راهنمایی کنم :)
دیتابیس: SQL compact
86606
mina0r0
جمعه 15 اردیبهشت 1391, 21:08 عصر
سلام . من متوجه نشدم از این فایل آموشی چطور استفاده کنم. میشه لطفا راهنمایی کنید ؟ ممنون
samadblaj
پنج شنبه 21 اردیبهشت 1391, 02:25 صبح
ممنونم دوست عزیزم بابت پروژه خیلی زحمت کشیدی فقط در ابتدای کار چند تا مشکل دارم لطفا . . .:لبخندساده:
1 - دلیل رخ دادن این خطا چیه؟
2 - این چند تا خطا در هنگام اجرا رخ دادن، نیاز هست بانک اطلاعات رو اتچ کرد؟ لطفا مبتدی توضیح بدید.
3 - رمز دیتا رو شما گذاشتید؟ ببخشید چند؟
uniqueboy_ara
شنبه 30 اردیبهشت 1391, 15:06 عصر
پسوورد دیتابیس arasoft هستش
در مورد اررورها فکر کنم که مشکل از ورژن ها باشه، من این پروژه رو با Visual Studio 2010 Sp1 نوشتم و خیلی از باگ هایی که توی EF وجود داشت توی SP1 ترمیم شده! احتمالا واسه همینه که مدلو نمیشناسه!
SaeidMirzaei
شنبه 06 خرداد 1391, 11:06 صبح
سلام با تشکر
من تاره با این تاپیک آشنا شدم خیلی عالیه لطفا اگر امکان دارد به همین شکل ادامه بدید
با تشکر:تشویق:
zahrashoja
شنبه 06 خرداد 1391, 14:41 عصر
کد جستجو با 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);
ممنون
اگه بخوام بعد از جستجو توی گرید ویو فقط فیلد های خاصی نشون داده بشه چطوری بنویسمش؟؟؟؟
farshadvl
سه شنبه 14 آذر 1391, 18:40 عصر
مرسی فیروزی جان کارت 20
sunboymn
پنج شنبه 29 فروردین 1392, 11:46 صبح
با فرض اینکه جدول مورد نظر ما 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
پنج شنبه 30 خرداد 1392, 11:36 صبح
سلام .پروژه Entity Frame work
:تشویق:
m,h,rastgoo
شنبه 01 تیر 1392, 15:14 عصر
ببخشد اگه بخوام وقتی درج انجام میشه اگه یکی از فیلد هایی که باید پر بشه usernameباشه, جطور میشه کدی نوشت که اگه این شخص موجود نبود در دیتابیس اون وقت درج کنه اکه موجود بود ثبت نشه
vahidth
شنبه 01 تیر 1392, 15:18 عصر
کاش بصورت فیلم آموزشی یاد میدادین 4 عمل اصلی رو
uthman
یک شنبه 02 تیر 1392, 19:30 عصر
سلام .در رویداد کلیک دکمه مربوطه کد زیر رو بنویس
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
یک شنبه 02 تیر 1392, 19:34 عصر
به زودی این کار رو انجام می دم و توی سایتم میگذارم.وقتی تم.مش کنم خبر میدم.
m,h,rastgoo
دوشنبه 03 تیر 1392, 09:17 صبح
سلام واقعا دستتون درد نکنه
m,h,rastgoo
دوشنبه 03 تیر 1392, 09:27 صبح
سلام
ایا میشه با entity framworkگزارش گیری کرد؟ چطور؟
من ویژوال استدیو 2012 نصب دارم ولی کریستال ریپورت داخلش نیست. خود کریستال ریپورت رو از سایتی دانلود کردم میگه مخصوص ویژوال 2010است و خود ویژوال استدیو2012 کریستال ریپورت رو داره میشه لطف کنیدبگین چطوری باید بیارمش
m,h,rastgoo
سه شنبه 04 تیر 1392, 16:08 عصر
سلام من با entity framework برنامه ای نوشتم حالا میخوام با استفاده از circular Progress(زمان load) کاری کنم که پر شدن درصد circular Progress بستگی داشته باشه به اینکه چقدر اطلاعات داخل databaseباشه یعنی زمان پر شدن درصد به اطلاعات بستگی داشته باشه
سوال بعد من اینه که چطور میشه در entity framework مثلا اگر ستونی در دیتابیس به نام بدهکار داریم به همه ی عناصر فقط همین ستون دسترسی داشته باشیم تا بتونیم این ها رو ویرایش کنیم
m,h,rastgoo
چهارشنبه 05 تیر 1392, 21:31 عصر
سلام سوالاتی که پرسیدم رو می شه جواب بدین کارم گیره
likemoon
چهارشنبه 05 تیر 1392, 22:38 عصر
چطوری میشه با استفاده از linq ستونهایی رو که در گرید ویو نمایش داده میشه محدود کرد؟؟؟؟ چون همیشه که نمیخوایم تمام ستون ها رو نمایش بدیم! همینطور در مورد کمبوباکس و ...
و چطوری میشه اسم ستون ها رو تغییر داد
uthman
پنج شنبه 06 تیر 1392, 12:15 عصر
سلام و قتی select میکنی جلوش یه new بنویس و داخل{} اسم فیلد ها تو بنویس.
اگه نفهمیدی بگو تا یه نمونه برات بذارم.
uthman
پنج شنبه 06 تیر 1392, 12:19 عصر
سلام ببخشید دیر ج دادم.ببین کد زیر کارتو راه میندازه .خودم تست نکردم چون دیدم عجله داری اینو گرفتم بنویسم.تست کن اگه جواب نداد بگو تا درستش کنم.
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
پنج شنبه 06 تیر 1392, 12:43 عصر
سلام دستت درد نکنه از کد بالا ولی این ارور میده منظورم ترد بندیcircular Progress2 هست
uthman
جمعه 07 تیر 1392, 11:17 صبح
سلام.پروژه زیر رو دانلود کن احنمالا کارتو راه بندازه.
به لینک زیر هم یه نگاهی بنداز
http://www.codeproject.com/KB/vb/sql...rprogress.aspx
hakan648
شنبه 08 تیر 1392, 11:21 صبح
در dotnettips.info بهترین آموزش های فارسی Entity Framework (http://www.dotnettips.info/tag/entity%20framework) توسط جناب وحید نصیری آموزش داده شده اند و نکات و مسائل خیلی گسترده ای هم توسط ایشون و دوستان دیگه مطرح شده اند، فیلم آموزشی، کتاب و ... قرار داده شده است و میتونید از اونها استفاده کنید.
کاری که کردید خیلی خوب هست، اما توصیه میکنم کار تکراری انجام ندید و تمرکز رو بزارید بروی قسمت هایی که شاید پوشش داده نشده اند. مثلا چند پروژه ی کامل و کاربردی ارائه کنید، ترفند ارائه کنید، از تجربیاتتون بگید و ...
وگرنه که مباحث مقدماتی (http://www.dotnettips.info/post/831/ef-code-first-1) و پیشرفته و نکات بسیار خوبی در سایتی که عرض کردم ارائه شده اند.
m,h,rastgoo
چهارشنبه 19 تیر 1392, 11:03 صبح
سلام می شه در مورد گزارش گیری با کریستال ریپورت در entity framwork توضیح بدین اگه امکانش هست یک برنامه در این مورد قرار بدین
sasanazizi2
شنبه 29 تیر 1392, 19:46 عصر
با سلام و تشکر برای مطالب مفید و پرکاربردتون .
ببخشید برای insert کردن این کاری که گفتین انجام نمیشه ! یعنی راستش اصلا addtostudent رو نمیاره برام !
لطفا راهنمایی کنید.
uthman
شنبه 29 تیر 1392, 20:40 عصر
با سلام و تشکر برای مطالب مفید و پرکاربردتون .
ببخشید برای insert کردن این کاری که گفتین انجام نمیشه ! یعنی راستش اصلا addtostudent رو نمیاره برام !
لطفا راهنمایی کنید.
سلام.اگه کد ها رو کپی کردی باید بجای syudent نام جدول خودت رو بنویسی. و اگر هم کل پروژه رو گرفتی دیتا بیس رو چک کن.
v.kermani
دوشنبه 30 دی 1392, 22:26 عصر
p=>p چکار میکنه؟
اگه نذاریمش چی میشه؟
elham_s20
سه شنبه 08 بهمن 1392, 10:49 صبح
p=>p چکار میکنه؟
اگه نذاریمش چی میشه؟
دوست عزیز نذاری فرقی نمی کنه
GridView1.DataSource = ctx.Users();
این کد بت همه ی رکورد ها رو میده
اما اینو یاد بگیری خوبه با این کار می تونی یه select بزنی به این شکل
//GridView1.DataSource = ctx.tabelname.Where(x => x.id == 4);
الان رکوردی که ای دی ان برار 4 باشه بت می ده
ctx اسم مدله
tabelname اسم جدوله
firoozi90
یک شنبه 13 بهمن 1392, 13:38 عصر
دوست عزیز نذاری فرقی نمی کنه
GridView1.DataSource = ctx.Users();
این کد بت همه ی رکورد ها رو میده
اما اینو یاد بگیری خوبه با این کار می تونی یه select بزنی به این شکل
//GridView1.DataSource = ctx.tabelname.Where(x => x.id == 4);
الان رکوردی که ای دی ان برار 4 باشه بت می ده
ctx اسم مدله
tabelname اسم جدوله
p=>p دستور Linq از نوع لامبدا هستش که همه رکوردهای جدولت را بر می گردونه.به روشی که دوستمون گفتن می تونید ازش استفاده نکنید.اما زمانی که بخواین از شرط استفاده کنید حتما باید از این دستور استفاده کنی.در واقع باید همه رکوردها را بکشی بیرون بعد از توی اونها اون رکورد خاص را پیدا کنی.
در ضمن p یک متغیر هستش و شما می تونید به جای اون از هر متغیر دیگه ای استفاده کنی
morika
دوشنبه 14 بهمن 1392, 13:48 عصر
سلام جناب فیروزی
من تمام مراحل شما رو اجرا کردم و این کد رو نوشتم:
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
دوشنبه 14 بهمن 1392, 16:50 عصر
سلام جناب فیروزی
من تمام مراحل شما رو اجرا کردم و این کد رو نوشتم:
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
جمعه 10 مهر 1394, 19:09 عصر
با سلام لطفا روش گزارش گیری رو در مدل انتیتی و استیمول سافت توضیح بدید . با تشکر
ciscozagros
شنبه 25 مهر 1394, 13:59 عصر
سلام به دوستان عزیز
من یه مشکلی دارم با درج اطلاعات
از 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
شنبه 26 آبان 1397, 15:28 عصر
سلام
چجوری میتونم
محتویات بدست اومده از 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
دوشنبه 05 آذر 1397, 11:15 صبح
کسی نبود کمکم کنه ؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.