Linq to SQL之查詢和新增

2021-09-05 16:41:15 字數 2153 閱讀 8016

本文以northwind資料庫中的customers和orders表為例說明linq to sql的查詢和新增是怎樣操作的。

首先通過linq to sql file嚮導建立datacontext以及相應的entity class,如果不知道怎樣做請看這裡:defining data model classes

建立乙個customer物件,然後把該資料新增到資料庫中去。

northwinddatacontext ctx = new

northwinddatacontext();

customer c = new

customer ;

ctx.customers.add(c);

ctx.submitchanges();

執行這段**,在sql profile中可以看到

exec sp_executesql n'insert into [dbo].[customers]([customerid], [companyname], [contactname]...
這條sql語句,說明資料插入到customer表中。然後再執行下面這段**,看看能不能把剛才新增的資料從資料庫中查詢出來

customer c1 = ctx.customers.single(c => c.customerid == "test1");

console.writeline(c1.customerid + " " + c1.companyname);

執行這段**後,在sql profile中可以看到執行了這條sql語句

exec sp_executesql n'select [t0].[customerid], [t0].[companyname], [t0].[contactname]...
螢幕上也列印出正確的結果

現在讓下面的**一次執行看看會發生什麼?

northwinddatacontext ctx = new

northwinddatacontext();

customer c = new

customer

; ctx.customers.add(c);

ctx.submitchanges();

customer c1 = ctx.customers.single(ct => ct.customerid == "test2");

console.writeline(c1.customerid + " " + c1.companyname);

通過sql profile中的記錄,可以發現這次只執行了插入語句而沒有執行查詢語句,但是查詢又的確返回了正確的結果。mtauly在video裡說這是linq to sql的一種cache機制,稱為identity cache。執行查詢的時候,如果datacontext發現查詢條件是主鍵而且只有主鍵的時候,它會先在cache中查詢,如果找到了就返回該物件,可以猜想在datacontext內部,可能用乙個hashtable類似的容易,以主鍵的值為key來快取操作過的物件。 而當我們用另乙個datacontext進行查詢或者查詢條件不只包含主鍵的時候,它會進行一次對資料庫的查詢。

下面來看看linq to sql怎樣進行一對多關係的查詢。其實很簡單:

customer c = ctx.customers.single(ct => ct.companyname == "test company1");

foreach (var order in c.orders)

通過觀察sql profile,發現只有使用c.orders,才會對orders表進行查詢,而在查詢customer的時候不會把與之相關的orders全部返回,這類似與hibernate裡面的lazy initialization機制吧。 再者,linq to sql裡面提供了一種稱為delay loaded機制,在字段上使用。意思是只有當使用這些欄位的時候,才進行一次資料庫查詢把這些字段選取出來提供使用,對於包含大資料字段(picture、blob)資料的表,該機制也能提高不少效率。如圖:

LINQ to SQL 簡單查詢

使用 linq 技術 進行查詢 步驟 1.先建立linq to sql 檔案 2.利用vs伺服器資源管理器連線上sql 把表拖到linq to sql 檔案中。code protected void page load object sender,eventargs e 編寫 注 建的linq to...

Linq to sql實現簡單查詢和分頁

最近跟著做高效平台的專案,在積累專案經驗的同時也吸收了不少新的知識,其中很讓我欣喜的是居然可以不用寫sql語句就能運算元據庫,對於sql語句經常出問題的程式設計人員來講毫無疑問真是雪中送炭呀。此處的 炭 就是linq to sql啦。linq to sql是linq net語言整合查詢 的一部分,用...

linq To SQl之關聯表同步新增資料

關聯表同步新增資料 如訂單和訂單詳細 使用者和使用者組別 protected void gvuser rowinserting object sender,devexpress.web.data.aspxdatainsertingeventargs e casagroup.entities.user...