PDA

View Full Version : سوال: استفاده از Enitity Framework در سی شارپ



Maryam_1368
جمعه 19 تیر 1394, 11:01 صبح
سلام
یه سوال برام پیش ا.مده.من حد.دا 3 سال پیش با سی شارپ کار کردم و یک برنامه ساده مدیریت کتابخونه با سی شارپ درست کردم
اون زمان از ado.net این برنامه رو ایجاد کردم.
یادمه از معماری سه لایه استفاده کردم به این صورت که یک کلاس می ساختم برای ارتباط با دیتابیس و به ازای هر جدول توی دیتابیس کلاس اون رو ایجاد میکردیم و بقیه کارها
حالا الان اومدم EF رو یاد بگیرم.
اما میبینم کلی داستان داره..
مثلا الان بحث Code Frist مطرح هستش.
آیا حتما باید از Code First استفاده کنیم؟
چه فرقی با DataBase First داره از نظر فنی؟
توی پروژه هاتون شما از چه روشی استفاده میکنید؟
البته یه Model First هم داریم که به نظرم زیاد جالب نیست
نظر و تجربه شما چیه؟

davidrobert
جمعه 19 تیر 1394, 11:39 صبح
کد نویسی ای اف خیلی راحت هستیش شما در ADO می یامدید ارتباط با دیتابیس رو میساختید و با دیتابیس ارتباط هی کانکش و دیزکانکشن میکردید تا به داده ها وصل بشید و قطع ولی در ای EF این کار راحت شده و نیازی نیست کلی دستور کانکشن بنویسید به دیتابیس خودش یه ارتباط ساده از دیتابیس میسازه به همراه شبی سازی از دیتابیس برای راحتی کار این پروژه من هستش با Ef شما این رو ببنید http://barnamenevis.org/showthread.php?500762-%D9%85%D8%B1%D8%AC%D8%B9-%DA%A9%D8%A7%D9%85%D9%84-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%A8%D8%A7-%D8%A2%D8%AE%D8%B1%DB%8C%D9%86-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-%D9%88-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D8%A7%D9%87%D8%B4-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%88-%D8%B3%D8%B1%D8%B9%D8%AA-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86&p=2237105&viewfull=1#post2237105 اصلا کد نویسی زیادی بابت ذخیره ، ویرایش یا غیره امسال این انجام ندادم مثل یه شی با جدوال هام بر خورد کردم و اطلاعات رو ذخیره و ، ویرایش و نمایش دادم کمتر از ADO کد نویسی کردم ADO سه لایه هستش ولی EF 2 لایه هستش این هستش فرق ساختارشون

Maryam_1368
جمعه 19 تیر 1394, 11:51 صبح
کد نویسی ای اف خیلی راحت هستیش شما در ADO می یامدید ارتباط با دیتابیس رو میساختید و با دیتابیس ارتباط هی کانکش و دیزکانکشن میکردید تا به داده ها وصل بشید و قطع ولی در ای EF این کار راحت شده و نیازی نیست کلی دستور کانکشن بنویسید به دیتابیس خودش یه ارتباط ساده از دیتابیس میسازه به همراه شبی سازی از دیتابیس برای راحتی کار این پروژه من هستش با Ef شما این رو ببنید http://barnamenevis.org/showthread.php?500762-%D9%85%D8%B1%D8%AC%D8%B9-%DA%A9%D8%A7%D9%85%D9%84-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%A8%D8%A7-%D8%A2%D8%AE%D8%B1%DB%8C%D9%86-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-%D9%88-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D8%A7%D9%87%D8%B4-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%88-%D8%B3%D8%B1%D8%B9%D8%AA-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86&p=2237105&viewfull=1#post2237105 اصلا کد نویسی زیادی بابت ذخیره ، ویرایش یا غیره امسال این انجام ندادم مثل یه شی با جدوال هام بر خورد کردم و اطلاعات رو ذخیره و ، ویرایش و نمایش دادم کمتر از ADO کد نویسی کردم ADO سه لایه هستش ولی EF 2 لایه هستش این هستش فرق ساختارشون

ممنون از پاسختون
حالا یه سوال..
کدوم روش رو شما استفاده میکنید؟ Code Frist یا DataBase First? دلیلش هم بگید اگه میشه

davidrobert
جمعه 19 تیر 1394, 12:04 عصر
راستیش من منظور Code Frist یا DataBase First رو متوجه نشودم ولی منظور model رو متوجه شودم من از روش model استفاده میکنم که خودش ارتباط با دیتابیس و همین طور تمام جدوال رو میسازه ویو رو به صورت پرسیجر امده باری کد نویسی راحت و همین طور درصد خطا دهی کمتر چطور شما اسم کادر متنتون رو میزارید textbox1 ولی بیاد بنویسید tetbox1 سیستم به شما خطا میده چون شی هستش و اسمش در دیزان فرم ذخیره شده و از اسم شما ایراد میگیره حالا در ای اف هم همین طور هستش شما بیاد اسم جدوال رو بزارید table1 ولی بیاد table_1 بنویسید به شما خطا میده چون table1 به صورت دیزارن بر حسب تکنولوژی کد تعریف شده به صورت شی گرا و از شما خطا میگیرده در حین کد نویسی درست مثل textbox1 بخاطر همین کلی فرق ADO و EF هستش در ADO می نوشتید "select * from table1" حالا نمی دونستید Table1 درست نوشتید با کلی گشتن تازه میفهمیدید کوئری که نوشتید اشتباه بوده ولی در ای اف همون اول اشتباه بنویسید ایراد میگیره و به شما میگیه اسمش این هستش table1 هستش نه table_1 بخاطر همین EFراحت تر هستش نثبت به ADO و گیج کننده نیست چون کار کردش رو نمی دونید میجید متوجه نمیشید من هم بار اول امدم یاد بگیرم گفتم متوجه نمیشم ولی وقتی یاد گرفت ADO بوسیدم گذاشم کنار چون دیدیم بهتر از ADO و درصد خطا کار من رو و کاهش کد نویسی من شوده.

Maryam_1368
جمعه 19 تیر 1394, 12:10 عصر
منظورم از database first و code first روش های کار کردن با دیتابیس از طریق EF هستش..
در حال حاضر آخرین روشی که معرفی شده COde First هستش..یعنی شما دیگه نمیای توی SQL SERVER دیتابیس ایجاد کنی..
خود EF میاد از روی کلاس های شما DATABَASE رو براتون ایجاد میکنه...
فقط الان من می یکم سوال برام پیش اومده این روش چه مزیتی نسبت به DATABASE FIRST داره..

davidrobert
جمعه 19 تیر 1394, 12:23 عصر
من خودم به شخصی از آخرین کد نویسی استفاده میکنم و این چیزی که میگید امکان پذیر نیست خودتون دیتابیس رو تو اسکیول سرور نسازید . خوب نتونستید منتظورتون برسونید ولی من متوجه شودم من از EF 6 استفاده میکنم برای کد نویسی که در حال حاظر جدید ترین تکنولوژی ای اف هستش . حالا در جواب شما
database first همان ADO ما هستش ما دیتابیس رو در اسکیول میسازیم و باز خودمون اسکریپت نویسی انجام میدیم برای نمایش ذخیره و غیره این database first هستش و از لحاظ کاری کلی کار ما رو سخت میکنه و باگ دهی برنامه زیاد میشه همون "select * from table1" که گفتم .
حالا در جدوال کد نویسی code first بگم شما در اسکیول سرور دیتابیس تون رو ایجاد میکنید ای اف میاد از دیتابیس شما نمونه اماده میسازه برای کد نویسی به صورت شی گرا نه اینکه نیاز نباشه دیتابیس در سکیول سرور نسازید شما دیتابیس رو میسازید ولی ای اف میاد اون دیتابیس شما رو به کلاس تبدیل میکنی برای کد نویسی راحت تر این فرقش هستش.
ما در ADO کلی کد نویسی میکنیم برای نمایش اطلاعات به صورت اسکریپ میگم.
SELECT SUM(dbo.Tbl_Foctor_Forosh_Kala.FFK_Tedad_Forosh) AS Expr1, SUM(dbo.Tbl_Foctor_Forosh_Kala.FFK_Dersid_Tekhfef) AS Expr7,
SUM(dbo.Tbl_Foctor_Forosh_Kala.FFK_Tekhfef) AS Expr6, SUM(dbo.Tbl_Foctor_Forosh_Kala.FFK_Dersid_Maleyat) AS Expr5,
SUM(dbo.Tbl_Foctor_Forosh_Kala.FFK_Maleyat) AS Expr4, SUM(dbo.Tbl_Foctor_Forosh_Kala.FFK_Gheme_Khales) AS Expr3,
SUM(dbo.Tbl_Foctor_Forosh_Kala.FFK_Ghemet_ghabil_P erdakht) AS Expr2, dbo.Tbl_Foctor_Forosh_Kala.FFK_CGHK_Code_Ya_BorCod e_Ghemet_Kala,
dbo.Tbl_Name_Kala.NK_Name_Kala, dbo.Tbl_Name_Kala.NK_Vahd_Kala, SUM(dbo.Tbl_Anbar_Khered.AKH_KHKASH_Ghemet_Forosh) AS Expr8
FROM dbo.Tbl_Foctor_Forosh_Kala INNER JOIN
dbo.Tbl_Name_Kala ON
dbo.Tbl_Foctor_Forosh_Kala.FFK_CGHK_Code_Ya_BorCod e_Ghemet_Kala = dbo.Tbl_Name_Kala.NK_CGHK_Code_Ya_BorCode_Ghemet_K ala INNER JOIN
dbo.Tbl_Anbar_Khered ON
dbo.Tbl_Foctor_Forosh_Kala.FFK_CGHK_Code_Ya_BorCod e_Ghemet_Kala = dbo.Tbl_Anbar_Khered.AKH_KHKASH_CGHK_Code_Ya_BorCo de_Ghemet_Kala
GROUP BY dbo.Tbl_Foctor_Forosh_Kala.FFK_CGHK_Code_Ya_BorCod e_Ghemet_Kala, dbo.Tbl_Name_Kala.NK_Name_Kala, dbo.Tbl_Name_Kala.NK_Vahd_Kala
حالا در EF برای نمایش به این صورت مینویسم.
var query = (from w in
(from q1 in db.Tbl_Anbar_Khered
join q2 in db.Tbl_Name_Kala on q1.AKH_KHKASH_CGHK_Code_Ya_BorCode_Ghemet_Kala equals q2.NK_CGHK_Code_Ya_BorCode_Ghemet_Kala
join q3 in db.Tbl_Foctor_Forosh_Kala//.Where(x => x.FFK_Date_Miladi == nowTime)
on q1.AKH_KHKASH_CGHK_Code_Ya_BorCode_Ghemet_Kala equals q3.FFK_CGHK_Code_Ya_BorCode_Ghemet_Kala

select new { q1, q2, q3 })
group w by w.q1.AKH_KHKASH_CGHK_Code_Ya_BorCode_Ghemet_Kala
into grp

select new
{
f_borcode = grp.Key,
F_namekala = grp.Select(c => c.q2.NK_Name_Kala).FirstOrDefault(),
F_VahdKala = grp.Select(x => x.q2.NK_Vahd_Kala).FirstOrDefault(),
F_TedadForosh = grp.Sum(z => z.q3.FFK_Tedad_Forosh),
F_GhemetForosh = grp.Sum(b => b.q1.AKH_KHKASH_Ghemet_Forosh),
F_DersdTekhfef = grp.Sum(z => z.q3.FFK_Dersid_Tekhfef),
F_DersidMaleYat = grp.Sum(d => d.q3.FFK_Dersid_Maleyat),
برای نمایش.

Mahmoud.Afrad
جمعه 19 تیر 1394, 18:20 عصر
davidrobert (http://barnamenevis.org/member.php?251829-davidrobert) با توضیحاتی که دادی متوجه شدم شما داری از روش Database first استفاده میکنی. برای اینکه متوجه تفاوت این روش ها بشید لینک های زیر رو نگاه کنید.
Database First (https://msdn.microsoft.com/en-us/data/jj206878.aspx)
Model First (https://msdn.microsoft.com/en-us/data/ff830362.aspx)
Code First (https://msdn.microsoft.com/en-us/data/jj193542.aspx)

در مورد مزایای EF Code First لینک زیر توضیح خوبی داده
http://www.dotnettips.info/post/831/ef-code-first-1
به نظر من کسی که code first رو خوب یاد بگیره تا حد بسیار زیادی شئ گرایی رو درک خواهد کرد و به اون مسلط خواهد شد.