linq和sql的區(qū)別 Linq和LinqtoSql有什么區(qū)別?一般做項(xiàng)目用哪種?
Linq和LinqtoSql有什么區(qū)別?一般做項(xiàng)目用哪種?Linq是微軟在.net3.0推出的一種新的數(shù)據(jù)訪問(wèn)和處理的方式,來(lái)解決過(guò)去處理集合對(duì)象數(shù)據(jù)所遇到的種種困難。其中在C#3.0和VB9中分別引
Linq和LinqtoSql有什么區(qū)別?一般做項(xiàng)目用哪種?
Linq是微軟在.net3.0推出的一種新的數(shù)據(jù)訪問(wèn)和處理的方式,來(lái)解決過(guò)去處理集合對(duì)象數(shù)據(jù)所遇到的種種困難。其中在C#3.0和VB9中分別引入了和SQL相似的Linq語(yǔ)法,使得現(xiàn)在操作各種數(shù)據(jù)對(duì)象變得非常容易而且可讀性更好。
Linq To Sql是微軟默認(rèn)提供的LinqProvider的一種,其他的還有LinqToDataSet LinqToXml LinqToEntity等。
平時(shí)開(kāi)發(fā)項(xiàng)目可以大量的使用linq,他會(huì)讓你在處理大量集合數(shù)據(jù)的時(shí)候提高效率。而Linq2Sql算是一個(gè)ORM框架,可以用來(lái)減輕數(shù)據(jù)訪問(wèn)的負(fù)擔(dān),如果你知道Hibernate之類(lèi)的ORM框架的話,就很容易理解他了
LinqToSql在實(shí)際開(kāi)發(fā)中怎么使用?
linqtosql和ef語(yǔ)法基本一樣,最大的坑也就是ef必須在linq語(yǔ)句之外定義好參數(shù),而linq2sql可以直接寫(xiě)在語(yǔ)句里(例如DateTime.Now.Date甚至Convert.ToXX)。
但如果是開(kāi)發(fā)正式項(xiàng)目,強(qiáng)烈不建議用linq2sql,因?yàn)? of X update fail這個(gè)bug我到現(xiàn)在都找不到解決方法。而且即便沒(méi)有使用非mssql的需求,ef也比linq2sql的自定義性更強(qiáng)。請(qǐng)問(wèn)什么叫ORM映射?。?/h2>
O 代表Object 即對(duì)象
R 代表Relation 即關(guān)系
M 代表Mapping 即映射
ORM即 對(duì)象關(guān)系映射
通過(guò)ORM工具,將對(duì)象與關(guān)系數(shù)據(jù)庫(kù) 聯(lián)系起來(lái)
orm工具 會(huì)動(dòng)態(tài)生成sql語(yǔ)句,使你用面向?qū)ο蟮恼Z(yǔ)法即可完成對(duì)數(shù)據(jù)庫(kù)的操作
.net中名氣比較大的orm工具有
NHibernate,Linq2Sql,EntityFrameWork等等
希望能夠?qū)δ阌袔椭?
比如 我們要從數(shù)據(jù)庫(kù)中 選取一條用戶(hù)信息
sql中 我們這樣寫(xiě) select * form user where userId= 1
而在NHibernate中 用hbl可以寫(xiě)為
from User u where u.UserId=1
即可獲得一個(gè)User對(duì)象 “注意是User對(duì)象”
雖然hbl的語(yǔ)法還不能說(shuō)很面向?qū)ο?但是已經(jīng)比sql進(jìn)步了 再來(lái)看看用linq的語(yǔ)法
from u in User where u.UserId = 1 select u
也可以返回一個(gè)User對(duì)象 但是語(yǔ)法上要比hbl更面向?qū)ο蟆?