有效進(jìn)行ADO.NET Entity Framework查詢學(xué)習(xí)
在資料庫應(yīng)用程式中,經(jīng)常會(huì)使用到交易模式來確保資料已經(jīng)正確的寫入資料庫,發(fā)生錯(cuò)誤時(shí)則做 Rollback 回溯動(dòng)作,在 Entity Framework 中,是透過 System.Transactions 命名空間中的 TransactionScope 來執(zhí)行交易程序。
對於操作資料庫非常熟悉的開發(fā)人員來說,由資料庫取出資料這件事是再平常不過的了,Transact-SQL 的 SELECT 陳述式可以做到的事情太多了,ADO.NET Entity Framework包含關(guān)聯(lián)性連結(jié),子查詢與遞迴查詢(Recursive Query)等等。
當(dāng)然在 ADO.NET Entity Framework 中的查詢能力也不能太弱,但是 Entity SQL 只是 Transact-SQL 的一個(gè)子集,無法做到 Transact-SQL 的所有功能。也就因?yàn)槿绱?,在設(shè)計(jì)資料庫時(shí),應(yīng)盡可能的將複雜查詢使用檢視表、預(yù)存程序或使用者函數(shù)(UDFs)來包裝,讓開發(fā)人員在寫程式時(shí)可以使用簡單的查詢方式,ADO.NET Entity Framework而這就是 DBA 的工作。#t#
Entity SQL 可以做到 Transact-SQL 多數(shù)的 SELECT 能力,不過會(huì)有一些限制,列示部份常見的限制如下:
查詢表格與欄位時(shí),必須要帶有別名(Alias):
以往在 Transact-SQL 中,不需要?jiǎng)e名即可存取資料庫,但是在 Entity SQL 中,必須要使用別名來參考,才可以存取 Entity,例如:
- SELECT a FROM T (Transact-SQL)
- SELECT n.a FROM T AS a (Entity SQL)
- SELECT T.a FROM T (Entity SQL with implicit alias)
若不想指定別名時(shí),就要指定表格的名稱ADO.NET Entity Framework會(huì)做內(nèi)隱式的別名轉(zhuǎn)換。Transact-SQL 中若要提取所有欄位,我們會(huì)用 * 來指示,但是這在 Entity SQL 中是不支援的,必須要明確的指出要提取的欄位名稱,例如:
- Transact-SQL:
- select b + c, count(*), sum(a)
- from T
- group by b + c
- Entity SQL:
- select k, count(t.a), sum(t.a)
- from T AS t
- group by b + c AS k