PDA

View Full Version : سوال: مزیت استفاده از Linq در برنامه نویسی چیست



پروگرامنویس
چهارشنبه 01 خرداد 1392, 00:02 صبح
درود بر شما
من یه سی شارپ کارم که دارم یه سایت مینویسم
من آموزش های زیادی از linq دارم ولی هنوز با این روش برنامه نویسی نکردم،با اینکه کار برنامه نویسی و کار با پایگاه داده باهاش خیلی ساده تر میشه یه جورایی ازین روش خوشم نمیاد! چون من عادت کردم که توی پروژه هام از کلاس بندی استفاده کنم و متدهای برنامه رو توی کلاس ها دسته بندی کنم ولی اونچیزی که از linq دیدم اینکه اگه همه پروژه با اینروش نوشته شه تقریبا تو پروژه به کلاس برای کار با جدولها دیگه نیازی نیست و متدها توی صفحه ها و فرم های جاری نوشته میشه و مستقیما به دیتابیس پیوند داده میشه که من اینکار رو زیاد دوست ندارم و .اگه قرار باشه از linq استفاده شه آیا بهتر کل پروژه رو با linq پیاده کرد یا میشه درجاهای مناسب تنها ازش سود برد ؟این جاهای مناسب کجاهاس؟آیا اینکه متدها یا بهتر بگم دستورات واکشی و ذخیره در پایگاه داده رو توی فرم ها بنویسیم از نظر امنیتی اشکال نداره و اینکه اینکار باعث دوباره نویسی متدها نمیشه؟

raziee
چهارشنبه 01 خرداد 1392, 00:20 صبح
با سلام.
گفته های شما در یک پروژه نمونه درست هست. اما در یک پروژه واقعی خیر.
بهتره برای برقراری ارتباط با دیتابیس به جای LINQ از Entity Framework استفاده کنید.
نوشتن و یا عدم نوشتن کد های ارتباط با دیتابیس در Code Behind صفحه ارتباطی با نوع برقراری ارتبط با دیتابیس نداره شما با ADO.NET هم ممکنه در جای نامناسبی کد نویسی کنید. این به معماری شما بر میگرده. به عنوان مثال در معماری 3 لایه، لایه Data Access هست که وظیفه کار با دیتابیس رو بر عهده داره حالا EF یا هر ORM دیگه ای.

پروگرامنویس
چهارشنبه 01 خرداد 1392, 12:37 عصر
سپاس دوست گرامی!
راستش من چون بصورت خودآموز دارم کار میکنم و کسی نیست که باهاش پرسش ها و اشکالهام رو درمیون بزارم با خیلی از این مفاهیم آشناییی ندارم .مثلا همین entity framework رو الان تو سایت سرچ کردم و چیزایی که دربارش خوندم بیشتر گیجم کرد! شاید تو بعضی کارهام ازش بهره بردم ولی نه نامش رو میدونستم و نه کامل روش تسلط دارم."بهتره برای برقراری ارتباط با دیتابیس به جای LINQ از Entity Framework استفاده کنید." این یعنی بهتره از linq استفاده نشه تو پروژه درسته؟میشه یه منبعی رو معرفی کنید که entity framework رو بصورت کاربردی و نه مفهومی آموزش بده .
و اینکه من یه پرسش دیگه برام پیش اومد.من هم ابتدای پروژه وبم تصمیم گرفتم از ارتباط فیلدهای داخلی وخارجی توی جدولهام استفاده کنم ولی انقدر توی برنامه بخاطر این قضیه به اررور بر خوردم که عطاش و به لقاش بخشیدم و کلا از ارتباط دادن فیلدها جداول بهم(کلید خارجی) چشم پوشی کردم .اینکار باعث شد که کدنویسی طولانیتر شه و پیچیده تر مثه حذف دستی یه رکورد از جدول و حذف رکوردهایی با آیدی مشابه در جدول دیگه. نظرتون درباره این کارم چیه؟ آیا غیرمنطقی هستش؟

ahmad156
چهارشنبه 01 خرداد 1392, 13:21 عصر
http://www.dotnettips.info/search/label/entity%20framework
استفاده از کلید خارجی خیلی منطقی تره.

raziee
پنج شنبه 02 خرداد 1392, 04:00 صبح
.اینکار باعث شد که کدنویسی طولانیتر شه و پیچیده تر مثه حذف دستی یه رکورد از جدول و حذف رکوردهایی با آیدی مشابه در جدول دیگه. نظرتون درباره این کارم چیه؟ آیا غیرمنطقی هستش؟
این کار به دلیل عدم تسلط شما بوده.
بهروز راد (که اتفاقا مدیر این بخش هم هستند و زحمات زیادی کشیدند) کتابی با عنوان مرجع كامل Entity Framework 4.1 (http://www.pendarepars.com/book/index/67/) دارند که بسیار خوب هست. من شخصا این کتاب رو مطالعه کردم.
وحید نصیری و دیگر دوستان هم در این آدرس (http://www.dotnettips.info/search/label/entity%20framework) مطالب آموزنده مفیدی رو قرار دادند

ایمان مدائنی
پنج شنبه 02 خرداد 1392, 09:51 صبح
Linq زبان کوئری گرفتن از کالکشن ها و مجموعه ها می باشد . میتونه از هر مجموعه ای کوئری بگیره

Linq نمیتونه چیزی رو به روز رسانی یا اضافه یا حذف کنه

فقط میتونه کوئری بگیره

حالا برای بانک اطلاعاتی یک Provider نیاز است تا بتونه جداول رو تبدیل به کالکشن کنه برای همین از Entity Framework استفاده میشود
Entity برای تمام بانک های اطلاعاتی میباشد که درایور آن روی سیستم نصب باشد و Linq را قادر به کوئری گرفتن از جداول میکنه

کلا Linq دنیای ADO.net رو زیرورو کرد میزان کد نویسی رو به شدت کاهش داد و کار رو راحت کرد

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



LINQ مختصر کلمه Language Integrated Query بوده و یک زبان برای تقاضا از هر گونه مجموعه داده (بانک اطلاعاتی، آرایه‌ها، Xml و…) می‌باشد. این زبان بسیار شبیه زبان SQL بوده و با زبان‌های C# و Vb.NET قابل پیاده سازی است. هدف اصلی خلق LINQ ارائه یک زبان یکتا جهت تقاضا، برنامه ریزی و فیلتر کردن اطلاعات ذخیره شده در اشیاء مختلف اعم از پایگاه داده، اشیا، آرایه‌ها و از همه مهتر XML است، این زبان قابلیت Debug شدن به صورت Runtime را دارست و بسیار قابل انعطاف است.

saeed_sho
پنج شنبه 02 خرداد 1392, 10:35 صبح
Linq زبان کوئری گرفتن از کالکشن ها و مجموعه ها می باشد . میتونه از هر مجموعه ای کوئری بگیره

Linq نمیتونه چیزی رو به روز رسانی یا اضافه یا حذف کنه

فقط میتونه کوئری بگیره

حالا برای بانک اطلاعاتی یک Provider نیاز است تا بتونه جداول رو تبدیل به کالکشن کنه برای همین از Entity Framework استفاده میشود
Entity برای تمام بانک های اطلاعاتی میباشد که درایور آن روی سیستم نصب باشد و Linq را قادر به کوئری گرفتن از جداول میکنه

کلا Linq دنیای ADO.net رو زیرورو کرد میزان کد نویسی رو به سدت کاهش داد و کار رو راحت کرد

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

ایمان مدائنی
پنج شنبه 02 خرداد 1392, 11:44 صبح
دوست عزیز با linq هم میشه اضافه یا حذف کرد من قبلا اینکارو کردم

بگید چطوری ؟
لطفا راهش را بگید
لطفا کد اینکار را بزارید تا ما هم یاد بگیریم

mohammad kafiyan
پنج شنبه 02 خرداد 1392, 11:55 صبح
http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.aspx

ایمان مدائنی
پنج شنبه 02 خرداد 1392, 12:01 عصر
http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.aspx
دوست من این Linq To sql است
http://www.scottgu.com/blogposts/linqtosql3/step2.jpg

همونطور که میبینی در تصویر از یک آبجکت New ساخته شده که همون Provider است که کار ثبت و ویرایش و حذف رو انجام میده
یعنی یک Provider برای ثبت و ویرایش و حذف وجود دارد

دوستمون گفت با Linq به تنهایی تونسته اینکار رو انجام بده

وگر نه من خودم گفتم که با Entity میشه این کار رو کرد که تقریبا همونه ولی Entity با هر پایگاه داده ای میتونه کار کنه

ahmad156
پنج شنبه 02 خرداد 1392, 12:14 عصر
سلام آقای مدائنی
میشه یه خرده بیشتر در مورد Provider ها توضیح بدین یا حداقل یه منبع جامع معرفی کنین
ممنون

ایمان مدائنی
پنج شنبه 02 خرداد 1392, 12:22 عصر
دوست عزیز provider ها تبدیل کننده به Collection هستند تا Linq بتونه از اونها کوئری بگیره

Provider بانک اطلاعاتی برای Sql اسمش Linq To Sql است و Entity با همه بانک ها کار میکنه

برای کوئری گرفتن از فیسبوک توسط Linq اسم Provider آن Linq To FacBook است
برای Gmail اسم Linq To Gmail تقریبا برای همه چی Provider وجود داره
اگر چیزی بود که Provider آن رو پیدا نکردی Linq To any کارت رو راه میندازه

مبحث فوق العاده جالبی است تقریبا از همه چی میتونه کوئری بگیره ولی چیزی رو نمیتونه تغییر بده
حالا برای تغییر نیاز به Provider ها است که برات نام بردم
در عکسی که ضمیمه شده مشخصه که یک Provider برای کار با بانک اطلاعاتی به کار رفته که اسم اون Linq To Sql است و در نتیجه Linq کوئری رو روی اون اجرا کرده و Result مورد نظر رو برمیگردونه حالا Provider کار ویرایش و حذف و افزودن رو انجام میده

مرجع كامل Entity Framework 4.1 (http://www.pendarepars.com/book/index/67/)

ahmad156
پنج شنبه 02 خرداد 1392, 12:30 عصر
برای اتصال به MySQL که باید از ODBC استفاده کرد،این ODBC هم نقش Provider داره(که البته با نام Driver اون رو در ConnectionString قید میکنن)؟
یا همچنین برای اتصال به Oracle که نیاز به odp هست؟

ایمان مدائنی
پنج شنبه 02 خرداد 1392, 12:34 عصر
دوست من برای MySql هم میتوان از Entity استفاده کرد
لینک زیر رو ببین
لینک (http://www.madaeny.com/Article/496/)

همانطور که گفتم Entity میتونه با تمام بانک های اطلاعاتی کار کنه

mohammad kafiyan
پنج شنبه 02 خرداد 1392, 13:52 عصر
بحث کاربرد و مزیت و تفاوت بین این دو تکنولوژی چگونه است؟؟:متفکر:

saeed_sho
پنج شنبه 02 خرداد 1392, 18:15 عصر
بگید چطوری ؟
لطفا راهش را بگید
لطفا کد اینکار را بزارید تا ما هم یاد بگیریم
بابت تاخیر شرمنده کار داشتم
من منظورم اضافه و حذف و ویرایش با Linq To Sql بود که گویا منظورمو خلاصه نوشتم و باعث شده بد متوجه بشید

fakhravari
پنج شنبه 02 خرداد 1392, 19:00 عصر
بابت تاخیر شرمنده کار داشتم
من منظورم اضافه و حذف و ویرایش با Linq To Sql بود که گویا منظورمو خلاصه نوشتم و باعث شده بد متوجه بشید
Linq To Sql فقط برای SQL و کلیه عملیات ها را به وسیله استور انجام میده که خیلی جالبه:بامزه:

پروگرامنویس
جمعه 03 خرداد 1392, 20:25 عصر
دوستان ولی کسی پرسش اصلی من رو پاسخ نداد .من میگم استفاده از linq یعنی استفاده نکردن از کلاس(حداقل برای کار با داده های پایگاه داده) و در نتیجه کد نویسی توی خود فرم ها و پیج های جاری برای کار با داده ها،که برای این کار باید کلا رویه کارم رو تغییر بدم درسته؟.من سر نا آگاهی یا هر چیز دیگه ای دارم به شکل قدیم کدنویسی میکنم یعنی نوشتن همه متدها توی کلاس های مربوطه و استفاده از اونها توی پیج ها . صددرصد چیزی که شما میگید یعنی استفاده از linq یا entity بهینه تر هستش .به گفته شما بهتر که برم entity رو یاد بگیرم و از خیر linq هم حتی بگذرم؟

tooraj_azizi_1035
جمعه 03 خرداد 1392, 22:10 عصر
LINQ چیزی غیر از Entity Framework است هر یک برای کاری ساخته شده اند.
LINQ بین دنیای اشیا و دنیای Data پل می زند. کلمات کلیدی مانند Select که قبلاً جزوی از زبانی مانند SQL بود اکنون در ردیف کلمات کلیدی در .NET قرار گرفته و یا اصطلاحاً first-class یا رده اول شده اند.
Entity Framework یک معماری است که به شما اجازه نگاه شیء گرایی به دیتابیس را می دهد یعنی به کارگیری مفاهیمی مانند وراثت و چندریختی که در دنیای دیتابیس رابطه ای وجود ندارد. EF کار ترجمه دو دنیا را انجام می دهد.