PDA

View Full Version : سوال: تفاوت SQL DataBase با LINQ TO CLASSESS



vbiman
دوشنبه 25 بهمن 1389, 12:57 عصر
سلام
تفاوت SQL DataBase با LINQ TO CLASSESS چی هستش؟ آیا کارهایی که برای ایجاد بانک اطلاعاتی با استفاده از SQL DataBase انجام می دهیم میشه همین کارها رو با LINQ TO CLASSESS انجام داد؟ چون من شنیدم که معمولاً برای کار با بانک اطلاعاتی از SQL DataBase استفاده می کنن و از LINQ TO CLASSESS در موارد خاصی که نمیدونم چی هست استفاده میشه ؟ :متفکر:

actros
دوشنبه 25 بهمن 1389, 14:27 عصر
سلام
تفاوت SQL DataBase با LINQ TO CLASSESS چی هستش؟ آیا کارهایی که برای ایجاد بانک اطلاعاتی با استفاده از SQL DataBase انجام می دهیم میشه همین کارها رو با LINQ TO CLASSESS انجام داد؟ چون من شنیدم که معمولاً برای کار با بانک اطلاعاتی از SQL DataBase استفاده می کنن و از LINQ TO CLASSESS در موارد خاصی که نمیدونم چی هست استفاده میشه ؟ :متفکر:

LINQ TO CLASSESS دیگه چه صیغه ایه؟
منظورت LINQ To SQL ئه؟ (بخون لینک تو سیکوئل)
LINQ To SQL یه ORM : Object Relational Mapper هست(مثل Entity Framework و NHibarnate) که وظیفش تبدیل Object های دیتابیس(Table-View-Store Procedure) به کلاسه.(partial class)
این ORM ها چند تا خوبی دارن:
1- ارتباط بین جدولها رو هم تو مدلسازیشون لحاظ می کنن (کاری که دیتا ست نمی کرد)
2- کلاساشون Partial ئه یعنی براحتی میتونی بهشون لایه اضافه کنی.(Business Logic و Data Access Logic) و کار خیلی OO تر میشه.
3- دیگه یه خط هم دستور به زبان (مزخرف) T-SQL نمی نویسی.همون کار ها رو با زبون LINQ انجام میدی.( + کلی کارای دیگه)
4-نیازی به باز و بسته کردن کانکشن و درست کردم محیط دیسکانکت نداری.خودش همه کار ها رو برات انجام میده و کار باهاش خیلی راحته. (قبلا برای وارد کردن اطلاعات به دیتابیس باید دونه دونه SQL Parameter تعریف می کردی و دستور SQL رو در غالب رشته میفرستادی.کانکشن باز میکردی بعد می بستی. الان همون کارا طی 3 سوت انجام میشه)

در ضمن با اومدن Entity Framework دیگه دلیل برای استفاده از LINQ To SQL نیست.(مگر اینکه هاستت زیر 3.5sp1 باشه )
مایکروسافت دیگه چیزی به LINQ To SQL اضافه نمیکنه.توصیه اش استفاده از Entity Framework ئه.
در کل ORM نه جانشین دیتابیسه نه قرار بشه : دی

vbiman
سه شنبه 26 بهمن 1389, 12:01 عصر
اگه امکانش هست یک مثال یا یه نمونه برنامه از این Entity Framework میذاری تا با نحوه کارش آشنا بشم ؟

actros
سه شنبه 26 بهمن 1389, 17:50 عصر
اگه امکانش هست یک مثال یا یه نمونه برنامه از این Entity Framework میذاری تا با نحوه کارش آشنا بشم ؟

فرضا یه دیتا بیس با 4 جدول داری و یه ORM مثل Entity Framework براش ساختی.EF ات یه چنین شکلی میشه (مراحل ساختش رو تو کتابای ASP.NET 4 نوشتن.خیلی سادست)

http://myup.ir/images/23579932801565840202.png (http://myup.ir/)

همونطور که می بینی ارتباط بین جداول کاملا لحاظ شده.
اون دو Property که دورش خط کشیدم خیلی مهمه و برای استفاده از EF تو Code Behind بهشون احتیاج داری.(میتونی اسامی رو تغییر بدی)

اگه بعد از طراحی EF دیتابیست تغییری کنه براحتی می تونی آپدیتش کنی :

http://myup.ir/images/53268907884821137158.png (http://myup.ir/)

http://myup.ir/images/59690394160524138809.png (http://myup.ir/)

فرض کن میخای تمام رکوردهای جدولی به نام Review رو به شرط این که توسط مدیر چک شده باشن رو از دیتابیس بخونی - بر اساس یه فیلدی سورتشون کنی(در اینجا ستون CreateDateTime ) و تو Reapeter نمایش بدی. برای اینکار کافیه همین چند خط کد رو تو رویداد Page_Load بنویسی:


Imports PlanetWroxModel

Partial Class Reviews_All
Inherits BasePage

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Using myEntities As New PlanetWroxEntities()
Dim allReviews = From review In myEntities.Reviews
Where review.Authorized = True
Order By review.CreateDateTime Descending
Select review
Repeater1.DataSource = allReviews
Repeater1.DataBind()
}
End Using
End Sub
End Class
نکته:
برای استفاده از EF تو Code Behind همونطور که گفتم باید 2 Property رو تو Code Behind اضافه کنی :
1- Import کردن Namespace در اینجا PlanetWroxModel
2- ساختن یه Object از EF :مثل این:

Using myEntities As New PlanetWroxEntities()بعضیا به جای استفاده از خط بالا این خط رو تو کلاس تعریف میکنن (مزیت استفاده از Using اینه که به محض اتمام کار از مموری پاک میشه)

Private db As New PlanetWroxEntities()
خیلی کارای جالبی میشه باهاش انجام داد.مثلا کد زیر تعداد رکوردهای جدول Review رو بر می گردونه:
VB:

Dim numberOfReviews = (From r In myEntities.Reviews
Select r).Count()C#:

#C
var numberOfReviews = (from r in myEntities.Reviews
select r).Count();یا از اون جالبتر این کد که رکورد 11 تا 20 جدولی رو بر می گردونه:
VB:

Dim allReviews = (From r In myEntities.Reviews
Order By r.Title
Select r).Skip(10).Take(10)C#:

var allReviews = (from r in myEntities.Reviews
orderby r.Title
select r).Skip(10).Take(10);همونطور که میبینی دیگه اثری از زبون T-SQL دیده نمیشه و کد VB و #C اش بسیار شبیه همدیگه این.