103
LINQ to SQL Tutorial From ScottGu blog Đào Hải Nam 2009

From ScottGu blog - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/.../linq_to_sql_tutorial_4774.pdf · LINQ to SQL Tutorial Bài 1: Sử dụng LINQ to SQL Đây là bài viết

  • Upload
    ngohanh

  • View
    237

  • Download
    0

Embed Size (px)

Citation preview

  • LINQ to SQL TutorialFrom ScottGu blogo Hi Nam

    2009

  • LINQ to SQL Tutorial

    LINQ to SQL Tutorial

    Buoc dich tir blog ScottGu - http://weblogs.asp.net/scottgu/default.aspx

    Nguoi dich: Dao Hai Nam - http://www.daohainam.com

    2

    http://weblogs.asp.net/scottgu/default.aspxhttp://www.daohainam.com

  • LINQ to SQL Tutorial

    Mc lcBi 1: S dng LNQ to SQL.................................................................................................................................6

    1. LINQ to SQL l g?......................................................................................................................................6

    2. M hnh ha CSDL dng LINQ to SQL:.................................................................................................... 6

    3. Tm hiu lp DataContext............................................................................................................................7

    4. Cc v d LINQ to SQL...............................................................................................................................8

    a. Ly cc Product t CSDL........................................................................................................................8

    b. Cp nht mt sn phm trong CSDL.......................................................................................................9

    c. Chn thm mt phn loi mi v hai sn phm vo CSDL....................................................................9

    . Xa cc sn p h m ..............................................................................................................................................10

    e. Gi mt th tc.................................................................................................................................... 11

    f. Ly cc sn phm v phn trang..........................................................................................................12

    5. Tng kt......................................................................................................................................................12

    Bi 2: nh ngha cc lp m hnh d liu.........................................................................................................13

    1. To ra mt m hnh d liu LINQ to SQL................................................................................................14

    2. Cc lp thc th....................................................................................................................................... 15

    3. To cc lp thc th t C SD L .............................................................................................................................15

    4. Cch t tn v ng php s nhiu...........................................................................................................17

    5. Quan h gia cc thc th.......................................................................................................................... 18

    6. Delay/Lazy Loading....................................................................................................................................19

    7. Dng cc Stored Procedure.....................................................................................................................................19

    Dng SPROCS cp nhxa,thm d liu...............................................................................................21

    8. Tng kt..................................................................................................................................................... 22

    Bi 3: Truy vn C s d liu...............................................................................................................................23

    1. M hnh ha CSDL Northwind dng LINQ to SQL............................................................................23

    2. Ly cc sn phm....................................................................................................................................... 23

    3. Trc quan ha cc cu truy vn LINQ to SQL trong trnh g li.............................................................25

    4. Gn ni cc cu truy vn LINQ to SQL vo cc control LINQ to SQL.................................................. 26

    5. Data Sharping............................................................................................................................................. 27

    6. Phn trang kt qu truy vn........................................................................................................................32

    7. Tng kt..................................................................................................................................................... 34

    Bi 4: Cp nht c s d liu................................................................................................................................ 35

    1. CSDL Northwind c m hnh ha dng LINQ to SQL........................................................................ 35

    Change Tracking v DataContext.SubmitChangesO................................................................................... 36

    2. Cc v d Insert v Delete..........................................................................................................................37

    3

  • LINQ to SQL Tutorial

    a. Thm mt sn phm..............................................................................................................................38

    b. Xa cc sn phm.................................................................................................................................38

    3. Cp nht thng qua cc quan h.................................................................................................................38

    4. Transactions............................................................................................................................................... 40

    5. Kim tra d liu v Business Logic........................................................................................................... 41

    6. H tr kim tra cc gi tr thuc tnh da trn schema ca CSDL............................................................41

    7. H tr ty bin vic kim tra gi tr cc thuc tnh...................................................................................41

    8. H tr ty bin vic kim tra tnh hp l ca thc th............................................................................. 42

    9. Ty bin cc phng thc kim tra vic thm/xa/sa d liu................................................................43

    10. Nng cao: Xem danh sch thay i cho Transaction.................................................................................... 44

    11. X l cc thay i ng thi vi Optimistic Concurrency:.................................................................. 45

    12. Dng SPROCs hoc ty bin logic cc cu SQL:................................................................................. 45

    Bi 5: S dng asp:LinqDataSource.....................................................................................................................47

    1. ng dng mu m chng ta s xy dng:................................................................................................. 47

    2. l g v n gip g cho chng ta? ........................................................................ 48

    Bc 1 : nh ngha m hnh d liu............................................................................................................ 49

    Bc 2: To danh sch sn phm.................................................................................................................50

    Bc 3: B cc ct khng cn thit............................................................................................................. 54

    Bc 4: Lc danh sch sn ph m .............................................................................................................................57

    Bc 5: Thm cc quy tc kim tra logic.................................................................................................... 60

    3. Tng kt..................................................................................................................................................... 63

    Bi 6: Ly d liu dng Stored Procedure............................................................................................................65

    1. Dng SPROC hay khng SPROC? l mt vn .............................................................................. 65

    2. Cc bc nh x v gi SPROC dng LINQ to SQL............................................................................... 66

    3. Cch nh x mt SPROC vo mt DataContext ca LINQ...................................................................... 67

    4. Cch gi SPROC mi c to.................................................................................................................68

    5. nh x kiu tr v ca phng thc SPROC vo mt lp trong m hnh d liu...................................69

    6. X l cc tham s th tc dng OUTPUT................................................................................................ 72

    7. X l cc th tc tr v nhiu kiu kt qu khc nhau.............................................................................. 73

    H tr cc hm do ngi dng t nh ngha (UDF)................................................................................... 75

    8. Tng kt..................................................................................................................................................... 77

    Bi 7: Cp nht d liu dng Stored Procedure.............................................................................................................. 78

    9. Bc 1 : To lp truy xut d liu (cha dng n cc th tc)............................................................... 78

    Thm cc quy tc kim tra d liu vo cc lp m hnh d liu.................................................................78

    Thm phng thc GetCustomerO vo lp DataContext........................................................................... 80

    4

  • LINQ to SQL Tutorial

    10. Bc 2: Dng lp truy cp d liu (cha s dng SPROC)................................................................. 81

    11. Ch mt giy - Ti ngh bi vit ny nh ni v vic dng SPROC c m ???................................. 82

    12. Cch s dng SPROC thc hin Insert/Update/Delete....................................................................83

    13. Bc 3: Thm mt Order bng cch dng SPROC..............................................................................83

    14. Bc 4: Thc hin cp nht dng SPROC........................................................................................... 87

    15. Bc 5: Dng lp DAL ln na............................................................................................................ 89

    16. Mt s u im ca vic dng SPROC...............................................................................................89

    Dng cc tham s dng output:.................................................................................................................... 89

    S th no nu mt SPROC pht ra mt li?...............................................................................................90

    Ti c th vit code thay v dung ORM designer gi SPROC?............................................................. 90

    17. Tng kt............................................................................................................................................... 90

    Bi 8: Thc thi cc biu thc SQL ty bin.....................................................................................................................91

    1. Dng cc cu truy vn SQL ty bin vi LINQ to SQL...........................................................................93

    2. Dng ExecuteQuery.................................................................................................................................. 93

    3. Ty bin cc biu thc SQL v theo vet (tracking) cc thao tc cp nht:............................................. 94

    4. Ty bin cc biu thc SQL vi cc lp ca bn.................................................................................... 95

    5. Ty bin cc cu SQL cho Inserts/Updates/Deletes................................................................................ 95

    6. Tng kt.....................................................................................................................................................96

    Di 9: Dng biu thc LINQ ty bin vi ........................................................................... 97

    1. Tm tt: dng vi mt mnh where c khai bo...................................... 97

    2. Dng cc s kin Selecting vi ...........................................................................98

    3. Thc hin cc php chiu khi truy vn vi s kin Selecting................................................................. 101

    4. Tng kt................................................................................................................................................... 103

    5

  • LINQ to SQL Tutorial

    Bi 1: S dng LINQ to SQL

    y l bi vit u tin trong lot bi c ch LINQ to SQL, cc bi ny s cho bn mt ci nhn khi qut, gip bn lm quen vi LINQ, mt trong nhng cng ngh mi c trong .NET 3.5.

    Lot bi ny c da trn lot Tutorial ca ScottGu (http://weblogs asp.nescottgu)

    1. LINO to SQL l g?

    LINQ to SQL l mt phin bn hin thc ha ca O/RM (object relational mapping) c bn trong .NET Framework bn Orcas (nay l .NET 3.5), n cho php bn m hnh ha mt c s d liu dng cc lp .NET. Sau bn c th truy vn c s d liu (CSDL) dng LINQ, cng nh cp nht/thm/xa d liu t .

    LINQ to SQL h tr y transaction, view v cc stored procedure (SP). N cng cung cp mt cch d dng thm kh nng kim tra tnh hp l ca d liu v cc quy tc vo trong m hnh d liu ca bn.

    2. M hnh ha CSDL dng LINQ to SQL:

    Visual Studio Orcas tch hp thm mt nh thit k LINQ to SQL nh mt cng c d dng cho vic m hnh ha mt cch trc quan cc CSDL dng LINQ to SQL. Bi vit sau s i su hn vo cch dng trnh thit k ny (bn cng c th xem oan video ny xem cch ti to mt m hnh LINQ to SQL).

    Bng cch dng trnh thit k LINQ to SQL, ti c th d dng to mt m hnh cho CSDL mu Northwind ging nh di y:

    6

    http://weblogs%e2%96%a0

  • LINQ to SQL Tutorial

    Stylesheetl.css Default.ispx.ci* Northwind.dbm r Default.ispx

    I Method Pane

    Product

    s Properties

    t ProducdDProductName

    :5* SupplierO!* CdtegorylD~ QuntityPerUnt2j* UnitPrice23* UnitslnStock

    UnitsOnCrder ? Reordertevel

    [>scont>ruied

    Category

    - Propertiei' Category

    CjttgoiyNamc '.*? Descnpxion

    Picture

    OrderDetoil r*f

    Proprtie5 OrderlD1 * ProducO

    ? UnitPriceQuantity

    ij? Discount

    V GetProudsByCategoy (lnt32 cateoylD)

    Order Ift

    ~ PropertiesOrdedD

    5* CustomerDEmployeelDOrderOate

    j j 1 Required DateShipped Da te

    i f ShipViaFreight

    i j i ShipName ShipAddress^ ShipOty

    ShipRegion2 * ShipPostalCode

    ShipCountry

    M hnh LINQ to SQL trn nh ngha bn lp thc th: Product, Category, Order v OrderDetail. Cc thuc tnh ca mi lp nh x vo cc ct ca bng tng ng trong CSDL. Mi instance ca mt lp biu din mt dng trong bng d liu.

    Cc mi tn gia bn lp thc th trn biu din quan h gia cc thc th khc nhau, chng c to ra da trn cc mi quan h primary-key/foreign-key trong CSDL. Hng ca mi tn ch ra mi quan h l mt - mt hay mt - nhiu. Cc thuc tnh tng ng s c thm vo cc lp thc th trong cc trng hp ny. Ly v d, lp Category trn c mt mi quan h mt nhiu vi lp Product, iu ny c ngha n s c mt thuc tnh Categories l mt tp hp cc i tng Product trong Category ny. Lp Product cng s c mt thuc tnh Category ch n i tng Category cha Product ny bn trong.

    Bng cc phng thc bn tay phi bn trong trnh thit k LINQ to SQL trn cha mt danh sch cc SP tng tc vi m hnh d liu ca chng ta. Trong v d trn ti thm mt th tc c tn GetProductsByCategory. N nhn vo mt categorylD v tr v mt chui cc Product. Chng ta s xem bng cch no c th gi c th tc ny trong mt on code bn di.

    3. Tm hiu lp DataContext

    Khi bn bm nt Save bn trong mn hnh thit k LINQ to SQL, Visual Studio s lu cc lp .NET biu din cc thc th v quan h bn trong CSDL m chng ta va m hnh ha. C mi mt file LINQ to SQL chng ta thm vo solution, mt lp DataContext s c to ra, n s c dng khi cn truy vn hay cp nht li cc thay i. Lp DataContext c to s c cc thuc tnh biu din mi bng c m hnh ha t CSDL, cng nh cc phng thc cho mi SP m chng ta thm vo.

    7

  • LINQ to SQL Tutorial

    Ly v d, di y l lp NorthwindDataContext c sinh ra da trn m hnh chng ta to ra trn:

    Class View ~ X

    L a

    * * 3 -

    + _ j Project References r WebApplicationl

    B Category E i j .Default ftl- MyProduct0 -^ 1

    0 j _ j B ase T yp#s

    DataContext ffl ^ Order - J OrderDetail Product

    NorthwindOataContext

    .....V GetProductsByCategory(int?)V NorthwindDataContext(stimg)V NorthwindDataContext(System.Data.IDbConnection

    - V NorthwindDataContextO T* Categories

    3* OrderDetails Orders

    Products

    i 111 j ..'"3; - M-Irn r-.p orer *5Server; pferer Class View

    4. Cc v d LINQ to SQL

    Mt khi m hnh ha CSDL dng trnh thit k LINQ to SQL, chng ta c th d dng vit cc on lnh lm vic vi n. Di y l mt vi v d v cc thao tc chung khi x l d liu:

    a. Ly cc Product t CSDL

    on lnh di y dng c php LINQ ly v mt tp Enum erable cc i tng Product. Cc sn phm c ly ra phi thuc phn loi Beverages:

    ^NorthwindDatacontext db = new NorthwindDatacontext();

    v a r p ro d u cts = from p in d b .P ro d u c tswhere p .ca te g o ry .ca te g o ry N a m e = "B e ve rag e s" s e le c t p;

    VB:

    8

  • LINQ to SQL Tutorial

    Dim db As New N o rth w in d D ataco n text

    Dim p ro d u cts = From p in d b .P ro d u c ts _w here p .c a te g o ry .ca te g o ry N a m e = "B e v e ra g e s" _ s e le c t p

    b. Cp nht mt sn phm trong CSDL

    on lnh di y cho thy cch ly mt sn phm, cp nht li gi tin v lu li CSDL.

    c#:

    N o rth w in d D a taco n text db = new N o rth w in d D a ta c o n te x tO ;

    P ro d u ct p ro d u ct = d b .P ro d u c t s .s in g le (p => p.productNam e = "Toy 1 " ) ;

    p ro d u c t .U n it P r ic e = 99; p ro d u c t .U n it s ln s to c k = 5;

    db.Subm i tc h a n g e s ( ) ;

    VB:

    Dim db a s New N o rth w in d D ataco n text

    Dim p ro d u ct = (From p in d b .P ro d u c ts _where p .ProductNam e = "Toy 1 " _ s e le c t p ) . s in g le

    p ro d u c t .U n it P r ic e = 99 p r o d u c t .u n it s ln s t o c k = 5

    d b .su b m itch a n g e s ( )

    c. Chn thm mt phn loai mi v hai sn phm vo CSDL

    on m di y biu din cch to mt phn loi mi, v to hai sn phm mi v a chng vo trong phn loi to. C ba sau s c a vo c s d liu.

    Ch rng ti khng cn phi t qun l cc mi quan h primary key/foreign key, thay vo , ti ch n gin thm cc i tng Product vo tp hp Products ca i tng category, v ri thm i tng category vo tp hp Categories ca DataContext, LINQ to SQL s bit cch thit lp cc gi tr primary key/foreign key mt cch thch hp.

    (Add c thay i bng InsertOnSubmit trong phin bn hin ti)

    9

  • LINQ to SQL Tutorial

    NorthwindDatacontext db = neiv Nor thv.indDatacontextO ;

    / / C reate new category and Products

    category category = new categ o ryQ ; category.categoryName = "S c o tt 'S Toys";

    product productl = new ProductO ; productl.ProductName = "Toy 1 " ;

    Product product2 = new ProductO ; product2.ProductName = "Toy 2 ;

    / / A ssocia te Products w ith Category

    categ o ry .p rod ucts .A dd (p ro ductl); category.P roducts.A dd(product2);

    / / Add category to database and save changes

    db .categori e s . Add(category); db. bubmltchangesQ;

    VB:

    fDim db as New NorthwindDatacontext

    ' C reate New Category and Products

    Dim category As New category category.categoryName = " s c o t t 's Toys"

    Dim productl as New Product productl.ProductName = "Toy 1"

    Dim product2 as New Product product2.ProductName = "Toy 2"

    ' A sso cia te products w ith category

    category .p rod ucts.A dd (p roductl) category .P roducts. Add(product2)

    ' Add category to database and save changes

    db .Categories.Add (category) db. submitchangesQ

    d. Xoa cac san pham

    Doan ma sau se bieu dien cach xoa tat ca cac san pham Toy khoi CSDL:

    (RemoveAll da dugc thay doi bang DeleteAllOnSubmit trong phien ban hien tai)

    C#:

    NorthwindDatacontext db = new Northw indDatacontext( ) ;

    var toyproducts = from p in db .Productswhere p. ProductN am e.contains("T o y " ) s e le c t p;

    d b .P ro d ucts . RemoveAl1(to yp ro d u cts );

    db. subm itchangesQ ;

    10

  • LINQ to SQL Tutorial

    VB:

    f *Dim db a s New N o rth w in d D ataco n text

    Dim to y P ro d u c ts = From p in d b .P ro d u c ts _w here p .c a te g o ry .c a te g o ry N a m e .c o n ta in s (" T o y " ) _ s e le c t p

    d b .P ro d u c ts .R e m o v e A l1 (to y P ro d u c ts )

    db. su b m itch an g e sO

    e. Goi mot thu tuc

    Doan ma duai day bieu dien cach lay cac thvrc the Product ma khong dung cu phap cua LINQ, ma goi den thu tuc GetProductsByCategory chung ta da them vao truac day. N ha rang mot khi da lay ve ket qua, toi co the cap nhat/xoa va sau do goi db.SubmitChanges() de cap nhat cac thay doi tra lai CSDL.

    Northv.indDatacontext db = new Northv^incDatacontext();

    var products - db.GetProductsByCategory(5);

    foreach (Product product in products){

    product.}

    Category CategorylD Discontinued

    V Equals v GetHashCodeV GetType

    OrderOetails ProductIDP roductN am e [string Product.ProductName

    VB:

    Dim db as New NorthwindDatacontext

    Dim products = db .G etProductsBycategory(S)

    For Each product in products

    product.

    Next |_ j CategorylD L T Discontinued

    V GetType | ProductID

    fcfel ProductName Public Property ProductNameQ As String|p f QuantityPerllnitL T ReorderLevel

    111JT SupplierlDII Lj4 UnrtPrice

    UnitsInStock -

    | Common | All

    11

  • LINQ to SQL Tutorial

    f, Ly cc sn phm v phn trang

    on m di y biu din cch phn trang trn server nh mt phn ca cu truy vn LINQ. Bng cch dng cc ton t Skipo v Take(), chng ta s ch tr v 10 dng t CSDL - bt u t dng 200.

    N o rth w in d D a taco n te x t db = new N o rth w in d D a ta c o n te x t( ) ;

    v a r p ro d u cts = (fro m p in d b .P ro d u c tswhere p .c a t e g o r y .c a te g o r y N a m e .s ta r t s w ith (" c " ) s e le c t p ) . s k i p ( 2 0 0 ) .T a k e (1 0 ) ;

    VB:

    rDim db a s New N o rth w in d D ataco n text

    Dim p ro d u cts = (From p in d b .P ro d u c ts _where p .c a te g o r y .c a te g o r y N a m e .s ta r t s w ith (" c " ) _ s e le c t p ) .s k ip ( 2 0 0 ) .T a k e (1 0 )

    5. Tng kt

    LINQ to SQL cung cap mt cch hay, r rng m hnh ha lp d liu trong ng dng ca bn. Mt khi nh ngha m hinh d liu, bn c th d dng thc hin cc cu truy vn cng nh cp nht, xa, sa d liu mt cch hiu qu.

    Hi vng nhng hng dn v v d mu trn gip bn lm quen vi LINQ. Ti s tip tc cc bi vit ny gip bn khm ph LINQ to SQL mt cch chi tit horn.

    12

  • LINQ to SQL Tutorial

    Bi 2: nh ngha cc lp m hnh d liu

    Trong phn mt, ti tho lun v LINQ to SQL l g v cung cp mt ci nhn c bn v nhng trng hp chng ta c th s dng n.

    Trong bi vit u tin, ti cng cung cp cc on code mu biu din cch x l d liu dng LINQ to SQL, bao gm:

    Cch truy vn d liu Cc cp nht d liu Cch chn v to quan h cc dng trong mt CSDL Cch xa cc dng trong mt CSDL Cch gi mt th tc Cch ly d liu v phn trang trn server

    Ti thc hin tt c cc thao tc d liu bng cch dng mt m hnh d liu LINQ to SQL ging nh di y:

    Stylesheetl.css Default.aspx.cs* Northwinddbfnr Default.aspx__________________________ ^ XMethod Pane

    * V G Product s ByCateoory (W32 category ID)

    Trong bi ny, ti s i vo chi tit cch to ra mt m hnh d liu LINQ to SQL ging nh trn.

    LINQ to SQL, cng nh LINQ to SQL, v tt c cc tnh nng khc m ti ni n trong lot bi ny s c coi nh mt phn ca .NET 3.5 v Visual Studio Orcas (nay l Visual Studio 2008).

    Bn c th lm theo tt c cc bc di y bng cch ti v hoc Visual Studio 2008 hoc Visual Web Developer Express. C hai u c th c ci t v dng ng thi vi Visual Studio 2005.

  • LINQ to SQL Tutorial

    1. To ra mt m hnh d liu LIN to SQL

    Bn c th thm mt m hnh d liu LINQ to SQL v mt d n ASP.NET, Class Library hay Windows bang cch dng ty chn Add New Item bn trong Visual Studio v chn LINQ to SQL:

    Categories: Templates:

    Add Caned

    Vic chn mc LINQ to SQL s khi chy LINQ to SQL designer, v cho php bn m hnh ha cc lp m n biu din mt CSDL quan h. N cng s to ra mt lp kiu DataContext, trong c cc thuc tnh biu din mi bng m chng ta m hnh ha trong CSDL, cng nh cc phng thc cho mi Stored Procedure m chng ta m hnh ha. Nh ti m t trong phn 1 ca lot bi ny, lp DataContext l thnh phn trung tm ca m hnh, ton b cc thao tc truy vn hoc cp nht d liu u c thc hin thng qua lp ny.

    Di y l nh chp mn hnh ca mt ca s thit k LINQ to SQL, v cng l ci m bn s thy ngay khi to ra mt m hnh d liu LINQ to SQL:

    14

  • LINQ to SQL Tutorial

    Toolbox___________ T 4 X Northwind.dbml" Web.confiqObject Relational Pes II .

    PointerMethod Pane

    [B Class y Association y Inheritance

    General

    There are no usable controls in this group. Drag an item onto this

    text to add it to the toolbox.

    The Object Relational Designer allows you to visualize data classes in your code

    Create data c l a s c e c d r a g g ' n g items from the Server Explorer or Toolbox on:c the designsurface.

    2. Cac lop thu-c the

    LINQ to SQL cho php bn m hnh ha cc lp nh x vo CSDL. Cc lp ny thng c l Entity Class (lp thc th) v cc instance ca n thng c gi l Entity (thc th). Cc lp entity nh x vo cc bng bn trong mt CSDL. Cc thuc tnh ca cc lp thng thng nh x vo cc ct trong bng. Mi instance ca mt lp thc th biu din mt dng trong bng.

    Cc lp thc th trong LINQ to SQL khng cn phi k tha t mt lp c bit no khc, iu cho php bn c th cho php chng tha k t bt c i tng no bn mun. Tt c cc lp c to ra dng LINQ to SQL designer u c nh ngha nh partial class' - c ngha l bn c th vit thm code thm vo cc thuc tnh, phng thc v s kin cho chng.

    Khng ging nh chc nng DataSet/TableAdapter c trong vs 2005, khi dng LINQ to SQL designer, bn khng cn ch ra cu truy vn SQL c dng to ra m hnh v lp truy xut d liu.

    Thay vo , hn tp trung ch yu vo vic nh ngha cc lp thc th, cch chng nh x vo CSDL, v mi quan h gia chng. Trnh LINQ to SQL c th m bn dng s m bo vic sinh ra cc lnh SQL thch hp vo lc chy khi bn tng tc v lm vic vi cc thc th d liu. Bn c th dng c php truy vn LINQ ch ra cch bn mun truy vn d liu.

    3. Tao cc lp thc th t CSDL

    Neu c cu trc cho CSDL, bn c th dng n to cc lp thc th LIN to SQL mt cch nhanh chng.

    15

  • LINQ to SQL Tutorial

    Cc d dng nht lm iu ny l m CSDL trong ca s Server Explorer bn trong Visual Studio, chn cc table v view m bn mun m hnh ha, v ko th chng ln trn ca s LINQ to SQL designer.

    Server Explorer

    |J scottguvista4. N orth win d. dbo Database Diagrams _ J Tables

    J AspNet SqlCacheTablesForChangeNc

    S 5 2 33 CustomerCustomeiDemo

    CustomerDemographics ~1 Customers

    13 Employees

    T-k-+' EmployeeTerritoriesaffi:--sa

    a-ffl?"S t

    Order Details ~~~l Orders

    ^3 B S E SRegion

    3 Shippers H Suppliers

    J Territories | Viewsg ] Alphabetical list of products : Category Sales for 1997 rrji Current Product List [[jp Customer and Suppliers by Cityr . I ' : 1

    Order Details Extended f l ] Order Subtotals

    Solution Explorer Server Explorer

    Khi bn thm 2 bng (Categories and Products) v 1 view (Invoices) t CSDL Northwind vo ca s LINQ to SQL designer, bn s c thm 3 lp thc th c to ra mt cch t ng:

    16

  • LINQ to SQL Tutorial

    Default-aspx-cs NorthwirxJ.dbml* W eb.config

    Method Pine

    Product

    Properties

    ? * ProductlDi ProductNmeJ3* SupplierlD!5* CategcrylD QuantityPerUnit2 ? UnitPrice3* UnitsInStockJ3* UnitsOnOrder.3* Reordeftevel * Discontinued

    4 ------ p .P roductID = 1 7 );

    s t r in g catName = product.

    Category * 1 (Category Product.CategorylJ?* CategorylDJ3* DiscontinuedV Equals IIV GetHashCodeV GetType II

    Ip?* ProductIDy p f ProductName

    PropertyChangedII ' PropertyChanging J

    18

  • LINQ to SQL Tutorial

    Neu bn khng thch cch m trnh thit k m hnh ha hoc t tn, bn hon ton c th chnh sa li. Ch can click ln mi tn ch ra quan h trn ca s son tho v truy cp vo cc thuc tnh ca n thng qua bng thuc tnh i tn, chnh sa hoc thm ch xa n.

    6. Delav/Lazv Loading

    LINQ to SQL cho php ch ra cc thuc tnh ca mt thc th s c ly v trc(prefetch) hay ch c ly khi ngi dng ln u truy cp (gi l dela/lazy loading). Bn c th ty bin cc quy tc prefetch/lazy load cho cc thuc tnh trong thc th bng cch chn thuc tnh hay quan h , v t li gi tr cho thuc tnh Delay Loaded thnh true hoc false.

    Ti c th cu hnh thuc tnh Picture n chi c np khi dng n bng cch t thuc tinh Delay Loaded thnh true:

    Category

    Properties

    i 2*? Categor/ID CategoryName

    j # Dijuiuiiuu

    *Properties

    Picture MemberProperty

    u0 Code Generation

    Access Public

    f Delav Loaded True )Inheritance Modifiei NoneName PictureType byte[] (System.Byte[])

    0 DataAuto Generated Vali FalseNullable TruePrimaiy Key FalseRead Only False

    ( Server Data Type lma

  • LINQ to SQL Tutorial

    dbo.GetProductsB...ista4.Northwind)* Default.aspx.es* [ Northwind.dbml | Web.config |

    a l t e r p r o c ed u r e dbo. G e tP ro d u c tsB y ca te g o ry

    C categ o ry lD in t)

    AS ______________ ______________________ _________________________________________[SELECT * from P ro d u c ts where C ateq o ry lD = @ cateq ory lc |

    Toi co the dung Server Explorer trong VS de keo/tha thu tuc SPROC len tren cua so soan thao LINQ to SQL de co the them mot phuong thuc cho phep goi SPROC. Neu toi tha SPROC len tren thuc the Product, LINQ to SQL designer se khai bao SPROC de tra ve mot tap ket qua co kieu IEnumerable:

    dbo.GetProductsB...ist4.Northwind)' Defaultaspx.cs' Northwind.dbmt* Web.config r X

    Method Pane

    Product Category

    3 Properties Q Properties

    1 3* Product 4 --------- C CategorylDProductName J i CategoryName

    3 f SupplieriO Description3 * CategorylD iS* Picture

    QuantityPerUnitUnitPnce

    3P UnitsInStock3 * UnitsOnOrder5 r Reorderlevel3 * Discontinued

    Get Products By^atesory (H32 categoiylD)

    Sau do toi co the dung cu phap LINQ to SQL hay goi thang phuong thuc o tren de lay ve cac thuc the ttr CSDL:

    20

  • LINQ to SQL Tutorial

    N o rth w in d D ataco n te x t db = new N o rth w in d D a ta c o n te x tO ;

    / / R e t r ie v e p ro d u cts based on an adhoc q u ery

    Enum erable p ro d u cts = from p in d b .P ro d u c tswhere p .c a te g o ry lD = 1 s e le c t p;

    / / R e t r ie v e p ro d u cts in s te a d u s in g a spr o c method

    p ro d u cts = d b .G e tP ro d u c ts B y c a te g o ry ( l) ;

    / / i t e r a t e over r e s u l t s

    fo re a c h (P ro d u c t p ro d u ct in p ro d u c ts ) {

    p ro d u c t .|

    Category f f l ~J j * Discontinued

    V EqualsV GetHashCode v GetType

    [ f f ProductlD ProductName

    f PropertyChanged PropertyChanging

    [Iint? Product.CategorylD

    Dng SPROCS cp nht/xa,thm d liu

    Mc nhin LINQ to SQL s t ng to ra cc biu thc SQL ph hp cho bn mi khi mun cp nht/xa/thm d liu. V d, nu bn vit m LINQ to SQL nh di y cp nht mt s gi tr trn mt thc th Product :

    rJN orth w in d D ataco n text db = new N o rth v .in d D a ta c o n te x t () ;

    p ro d u ct p ro d u ct = d b .P ro d u c t s .s in g le (p => p .ProductN am e == "Toy 1 " ) ;

    p r o d u c t .u n it P r ic e = 99; p ro d u c t .U n it s ln s to c k = 5;

    db. su b m itch a n g e sO ;

    Mc nhin, LINQ to SQL s to v thc thi pht biu UPDATE tng ng khi bn xc nhn thay i (ti s ni thm v vn ny trong nhng bi vit khc).

    Bn cng c th nh ngha v dng cc th tc INSERT, UPDATE, DELETE nu mun. cu hnh, click ln mt lp thc th trong ca s LINQ to SQL v trong bng thuc tnh, nhn chut ln trn nt . . . n cc gi tr Delete/Insert/Update, v chn SPROC m bn nh ngha.

    21

  • LINQ to SQL Tutorial

    Properties 4 X

    Cat egory DataClass *

    il J Code Generation

    Access Public

    Custom Attribut

    Name Category

    B Data

    Source dbo.Categories

    B Default Methods

    | Delete JUse Runtime (7T)

    Insert Use Runtime

    Update Use Runtime

    Delete

    C mot dieu hay l nhng thay di trn hon ton duoc thuc hin lp nh xa LINQ to SQL - co ngha l tt c nhng doan lnh m ti d vit tnrc dy du c th tip tue lm vic m khng cn thay di bt k dieu gi. Dieu ny gip trnh phi thay di lai code ngay c nu sau ny ban mun dng mot hm SPROC ti uu hon sau ny.

    8. Tng ket

    LINQ to SQL cung cp mot each thuc don gin, sang sa d m hinh ha lp d lieu trong irng dung ca ban. Mot khi ban d dinh ngha m hinh d lieu, ban c th thuc hin cc cu truy vn, thm, cp nht v xa d lieu mot each d dng v hiu qu.

    Dng trinh thit k LINQ to SQL c sn trong Visual Studio v Visual Web Developer Express, ban c th tao v qun l m hinh d lieu eue k nhanh. Trinh LINQ to SQL designer cng v cng mm do d ban c th ty bien cc hnh vi mac nhin v ghi de hoc m rng h thng sao cho ph hop vi nhng yu cu eu th no d.

    Trong nhng bi tip theo ti s dng m hinh d lieu chng ta d tao ra trong bi ny d do sau hon vo vic truy vn, thm, cp nht v xa d lieu. Trong cc bi vit v cp nht, thm, xa ti cng s tho lun v cch thm cc doan lnh d kim tra d lieu cng nhu cc quy tac vo cc lp thuc th chng ta d dinh ngha trn.

    Mike Taulty cng c mot s doan video rt hay v LINQ to SQL m ban nn xem tai dy. Chng cung cp mot cch tuyt vi d hoc bang cch xem nhng ngui khc tng buc s dung LINQ to SQL.

    22

  • LINQ to SQL Tutorial

    Bi 3: Truy vn C s d liu

    Thng trc ti bt u vit lot bi v LINQ to SQL. LINQ to SQL l mt b khung (framework) c sn cho O/RM (object relational mapping) trong .NET 3.5, n cho php bn d dng m hnh ha cc CSDL quan h dng cc lp .NET. Bn c th dng cc biu thc LINQ truy vn CSDL, cng nh c th cp nht/thm/xa d liu t .

    Trong bi vit ny, ti s i su hon vo cch chng ta dng m hnh d liu to trong phn 2, v cch dng n truy vn d liu bn trong mt d n ASP.NET.

    1. M hnh ha CSDL Northwind dng LINQ to SQL

    Trong phn 2 ca lot bi ny, ti i qua cc bc e to mt m hnh cc lp LINQ to SQL bng cch dng trnh LINQ to SQL c sn trong vs 2008. Di y l mt hnh m ti to dng CSDL mu Northwind:

    Styiesheetl.cst Defauh.aspx.cs* Northwind-dbml" Default.aspx y X

    Mthod Pane I

    * V Get Product s&yCdteQory (Irt32 category ID)

    Product Category

    3 Properties = Properties

    ? ^ ProductlD Category IDProductName Category NarrSupplierlD Description

    3* Categcr/ID Picture QontityPenit3 * UnitPrif*

    UnitsnStock'4* Un rtsOnOrder order .3* Recrdeftevel13* Discontinued Properties

    1 2? Ofdr!D11 5* CustomerfD 13* EmployeeD

    ^ OrderOteOnJerOetail !j3* Required Date

    * ShippedDate- Properties ShipVia

    * J * OrderiD freight

    ? 3* ProductID 3* ShipName

    ^5* UnitPrice ShipAddress

    Quantity ShipCity

    Discount 3* ShipRegion3* ShipPostalCode

    " >hipCountiy

    2. Ly cc sn phm

    Mt khi nh ngha m hnh d liu nh trn, chng ta c th dc dng truy vn v ly d liu t CSDL. LINQ to SQL cho php bn lm iu ny bng cch vit cc cu truy vn dng c php LINQ vi lp NorthwindDataContext m chng ta to dng trnh thit k LINQ to SQL designer trn.

    V d, ly v duyt qua mt tp cc i tng Product, ti c th vit code nh di y:

    23

  • LINQ to SQL Tutorial

    NnrrhwindnaraennrexT rih - npw NnrrhwindrararnnrpxTo ; '

    var products from p in db.Products where p.CategorylD == 2 se lect p;

    foreach (Product product in products){

    product. I

    V GetHashCodeV GetType

    OrderDetails

    3 B M Mi f f ProductName y PropertyChanged J PropertyChanging

    ^ QuantityPerUnit ReorderLevel

    2 ? SupplieriD

    int Product.ProductID

    Trong cu truy vn trn, ti dng mt mnh where trong c php LINQ ch tr v cc sn phm trong mt category cho trc. Ti hin ang dng CategoryED ca Product thc hin lc ra cc dng mong mun.

    Mt trong nhng im hay l ti c rt nhiu la chn, rt nhiu cch ty bin cu lnh, v ti c th nm bt u im ca mi quan h gia cc thc th m ti to khi m hnh ha cc lp lm cho cu lnh phong ph v t nhin hn. V d, ti c th sa li cu truy vn lc ra cc dng theo CategoryName thay v CategorylD bng cch vit cu lnh LINQ nh sau:

    s --------------7------------------- 7--------------------------- !----------------------------- NN o rth w in d D ataco n tex t db = new N o rth w in d D a ta c o n te x tO ;

    v a r p ro d u cts = from p in d b .P ro d u c tswhere p .ca te g o ry .ca te g o ry N a m e == "B e ve rag e s"

    V_______se1ectpr _____________

    Ch cch ti dng thuc tnh Category trn mi i tng Product lc theo CategoryName ca Category cha Product . Thuc tnh ny c t ng to ra bi LINQ to SQL v chng ta m hnh ha cc lp Category v Product nh mt mi quan h mt-nhiu.

    Mt v d khc v cch dng quan h trong m hnh d liu bn trong cc cu truy vn, chng ta c th vit cu lnh LINQ nh di y ly v ch nhng Product c 5 hoc hn on t hng:

    ^ N o rth w in d D a ta C o n te xt db = new N orthw ind D ataC ontex i: ( ) | '

    v a r p ro d u cts = from p in d b .P ro d u c tswhere p .o r d e r D e t a i ls .c o u n t > 5 s e le c t p;

    V_______________________________________________________ '

    Ch cch chng ta dng tp hp OrderDetails m LINQ to SQL to trn mi lp Product (nh vo mi quan h mt-nhiu m chng ta m hnh ha trong trnh thit k LINQ to SQL).

    24

  • LINQ to SQL Tutorial

    3. Trc quan ha cc cu truy vn LINQ to SQL trong trnh g li

    Cc trnh nh x O/R (Objcct relational mapper) nh LINQ to SQL to ra v thc thi cc cu lnh SQL mt cch t ng mi khi bn thc hin mt cu truy vn hay cp nht m hnh i tng ca n.

    Mt trong nhng iu quan tm ln nht m cc lp trnh vin mi quen vi ORM l: Cu lnh SQL thc s c thc thi l g?. Mt iu thc s th v v LINQ to SQL l n cho php xem rt d dng cu nh SQL c thc thi thc s khi bn chy ng dng trong ch g li.

    Bt u t bn Beta2 ca vs 2008, bn c th dng mt LINQ to SQL visualizer plug-in xem mt cch d dng (v kim tra) bt k cu lnh truy vn LINQ to SQL no. Ch cn t mt breakpoint v di chut ln trn mt cu lnh LINQ to SQL, sau nhn vo biu tng chic knh lp xem gi tr ca cu lnh mt cch trc quan:

    Nort hwin d o a ta c o n te x t b = new Nort hwin D a ta c o n te x t SBva r p ro d u cts : = from p in db. P ro d u c ts

    IS V products! * " {SELECT [tO].[ProductID], [to].[ProductName], [to].p ; ............. ... ,

    Mt ca s s hin ln cho php bn xem mt cch chnh xc cu lnh LINQ to SQL m LINQ to SQL s ng ly v cc i tng Product:

    0^ SQL Server Query Visualizer 11=1 ^ \ m & 4 ]

    Table(Product).Where(p => (p.Category.CategoryName = "Beverages"))

    SELECT [tO].[ProductID], [tO].[ProductName], [tO].[SupplierID], [tO].[CategoryID], [tO].[QuantityPerUnit], [tO].[UnitPrice], [tO].[UnitsInStock], [tO].[UmtsOnOrder], [tO].[ReorderLevel], [to].[Discontinued]FROM [dbo].[Products] AS [to]LEFT OUTER JOIN [dbo].[Categories] AS [tl] ON [tl].[CategoryID] = [tO].[CategoryID]WHERE [tl].(CategoryName] = pO

    po [String]: Beverages'

    Execute

    Neu bn nhn nt Execute trn ca s ny, n s cho php bn chy cu lnh SQL trc tip trong trnh debugger v xem mt cch chnh xc d liu c tr v:

    25

  • LINQ to SQL Tutorial

    I s IM J b ^ s T

    Product ID Product Name SupplierlD Category ID Quantity PerUnit Unit Price

    1 Chai 1 1 10 boxes x 20 bags 66.00002 Chang 1 24 -12 oz bottles 19.0000

    24 Guaran Farrtsti... 10 1 12 - 355 ml cans 4.5000

    34 Sasquatch Ale 1G 1 24 -12 oz bottles 14.0000

    35 Steeleye Stout 16 1 24 -12 oz bottles 18.0000

    38 Cte de Blaye 18 1 12 - 75 cl bottles 263.5000

    39 Chartreuse verte 18 1 750 cc per bottle 18.0000

    43 Ipoh Coffee 20 1 1G - 500 g tins 46.0000

    67 Laughing Lumber... 1G 1 24 -12 oz bottles 14.0000

    70 Outback Lager 7 1 24 355 ml bottles 15.0000

    75 Rhnbrau Kloster... 12 1 24 - 0.51 bottles 7.7500

    76 Lakkalikri 23 1 500 ml 18.0000

    iu ny r rng lm cho vic xem nhng g LINQ to SQL lm cho bn tr thnh cc k d dng. Nh rng bn c th d dng thay th cu SQL m LINQ to SQL thc thi nu mun - mc d trong 98% trng hp ti ngh bn s thy rng cu lnh m LINQ to SQL thc thi l thc s, thc s tt.

    4. Gn ni cc cu truy vn LINQ to SQL vo cc control LINQ to SQL

    Cc cu truy vn LIN tr v kt qu m n s implement interrface Enumerable - y cng l interface m cc control ASP.NET dng h tr gn ni cc i tng. iu ny c ngha l bn c th gn ni kt qu ca bt k cu lnh LINQ, LINQ to SQL hay LIN to XML vo bt k control ASP.NET no.

    Ly v d, bn c th khai bo mt control trong mt trang .aspx ging nh sau:

    X ' N' Products

    < a sp :G r i d v iew lD = "G ri d v ie w l"c s s c l a s s = "g r i dview "A l t e r n a t ! ngRovvstyl e - c s s c l ass= "e ve n " ru n a t= " s e r v e r " />

    Ti cng c th gn ni kt qu ca cu LINQ to SQL vit trc y vo GridView ging nh sau:

    26

  • LINQ to SQL Tutorial

    N o rth w in d D ataco n te x t db = new N o rth w in d D ataco n text O ;

    v a r p ro d u cts = from p in d b .P ro d u c tswhere p .ca te g o ry .ca te g o ry N a m e = "B e ve rag e s" s e le c t p;

    G r id v ie w l.D a ta s o u rc e = p ro d u c ts ;G r id v ie w l . D a ta B in d Q ;

    No se sinh ra mot trang trong nhir sau:

    Untitled Page - Windows Internet Explorer

    ( __j '0 http://localhost:49316/Default .aspx Live Search

    ig, Snaglt |j

    '~ Untitled Page 0 - Page -'j Tools

    P roducts

    1 ProductID ProductName QuantityPerUnit Discontinued

    1 Chai 10 boxes x 20 bags

    2 Chang 24 - 12 oz bottles

    24 Guaran Fantstica 12 - 355 ml cans

    34 Sasquatch Ale 24 - 12 oz bottles

    35 steeleye stout 24 - 12 oz bottles

    Done 0 Internet | Protected Mode: Off $.100%

    5. Data Sharping

    Hin ti, mi khi xc nh kt qu truy vn, chng ta ly ton b cc ct d liu cn thit cho cc i tng thuc lp Product:

    V d, cu truy vn sau ly v cc sn phm:

    N o rth w in d D ataco n text db = new N o rth w in d D a ta c o n te x tO ;

    v a r p ro d u cts = from p in d b .P ro d u c tswhere p .ca te g o ry .ca te g o ry N a m e == "B e ve rag e s ' s e le c t p;

    Va toan bo ket qua dugc tra ve:

    27

    http://localhost:49316/Default

  • LINQ to SQL Tutorial

    h1 QueryResult C3 I B - y '

    Product ID Product Name Supplier! D Category ID Quantity Perllnit Unit Price

    1 Chai 1 1 10 boxes x 20 bags 66.00002 Chang 1 24 -12 oz bottles 19.0000

    24 Guaran Farrtsti... 10 1 12 - 355 ml cans 4.5000

    34 Sasquatch Ale 1G 1 24 -12 oz bottles 14.0000

    35 Steeleye Stout 16 1 24 -12 oz bottles 18.0000

    38 Cte de Blaye 18 1 12 - 75 cl bottles 2G3.5000

    39 Chartreuse verte 18 1 750 cc per bottle 18.0000

    43 Ipoh Coffee 20 1 1G - 500 g tins 46.0000

    67 Laughing Lumber... 16 1 24 -12 oz bottles 14.0000

    70 Outback Lager 7 1 24 - 355 ml bottles 15.0000

    75 Rhnbru Kloster.. 12 1 24 - 0.51 bottles 7.7500

    76 Lakkalikri 23 1 500 ml 18.0000

    Ml J____________ '

    Thng thi chng ta ch mun tr v mt tp con ca d liu v mi sn phm. Chng ta c th dng tnh nng data shaping m LINQ v cc trnh dich c#, VB mi h tr ch ra rng chng ta ch mun mt tp con bng cch chnh sa li cu truy vn nh sau:

    /^N orthw indD ataContexT db = new N orthw i nd D ataco n text ( ) ;

    v a r p ro d u cts = from p in d b .P ro d u c tswhere p .C a te g o ry .categoryNam e == "B e ve rag e s" s e le c t new {

    ID = p .p ro d u c t lD ,Name = p.ProductNam e

    V____ h ________ Jiu ny s tr v ch mt tp con d liu c tr v t CSDL:

    28

  • LINQ to SQL Tutorial

    Mt iu thc s th v v LINQ to SQL l ti c th tn dng tt c u im ca cc quan h trong m hnh d liu khi mun gt gia li d liu. N cho php ti biu din y v hiu qu cc cu truy vn. Ly v d, cu truy vn di y ly v ID v Name t thc the Product, tng s on hng c t cho sn phm , v ri ly tng gi tr ca tng on hng:

    / T j o r t h w i n d D a t a c o n t e x t db = new N o r t h w i n d D a t a c o n t e x t O ;

    var p roducts = from p in d b .Productswhere p .category .categoryN am e "Beverages" s e le c t new {

    ID = p .P ro d u c tlD ,Name = p.ProductName,Numorders = p .o rd e rD G ta ils .c o u n t ,Revenue = p .o rd e rD e ta ils .su m (o = > o .u n itP r ic e * o .Q u a n t ity )V _______ J

    LINQ to SQL thng minh c th chuyn biu thc LINQ trn thnh cu SQL di y khi n c thc thi:

    29

  • LINQ to SQL Tutorial

    OJ SQL Server Query Visualizer _ 1, a | 11

    Table(Product).Where(p => (p.Category.CategoryName = "Beverages")).Select(p => new f_AnonymousTypeO'4(ID - p.ProductlD, Name = p.ProductName, NumOrders = p.OrderDetails.Count, Revenue = p.OrderDetails.Sum(o => (o.UnitPrice * Convert(o.Quantity)))))

    SELECT [tO].[ProductID], [tO].[ProductNameJ, (SELECT COUNTOFROM [dbo].[Order Details] AS [t2]WHERE [t2].[ProductiD] = [tO).[ProductID]) AS [value], (SELECT SUM([t3].[UnitPrice] * (CONVERT(Decimal(38,9),[t3].[Quantity])))FROM [dbo],[Order Details] AS [t3]WHERE [t3].[ProductID] = [tO].[ProductID]) AS [value2]

    FROM [dbo].[Products] AS [tO]LEFT OUTER JOIN [dbo].[Categories] AS [tl] ON [tl].[CategoryID] = [tO].[CategorylD] WHERE [tl].[CategoryName] = pO

    pO [String]: Beverages

    |f] Original query Execute

    Cu SQL tren cho php tnh toan tt c cc gi tri ca NumOrders v Revenue tr ngay tren SQL server, v tr v ehi nhng d lieu nhu dui dy (lm cho vic thuc thi duoc nhanh chng):

    051 QueryResult

    ProductID ProductName value value2

    75 Rhonbrau Woster... 46 8650.550000

    35 Steeieye Stout 36 14536 800000

    43 Ipoh Coffee 28 25079.200000

    38 Cte de Biaye 24 149984.200000

    67 Laughing Lumber... 10 2562.000000

    1 Chai 38 14277.600000

    24 Guaran Fantsti... 51 4782.600000

    70 Outback Lager 39 11472.000000

    76 Lakkalfcri 39 16794 000000

    2 Chang 44 18559.200000

    39 Chartreuse verte 30 13150.800000

    34 Sasquatch We 19 6678 000000

    Chng ta c th gn ni tp kt qu vo control GridView d tao ra mot giao din dep hon:

    30

  • LINQ to SQL Tutorial

    '& Untitled Page - Windows Internet Explorer

    J * I http://localhost:493X6/Default.aspx

    I a r a I

    X I Live Search p -

    u $ Untitled Page

    Products

    m Name 1 NumOrders 1 RevenueX Chai 38 $14,277.60

    2 Chang 44 $18,559.20

    24 Guaran Fantstica 51 $4,782.60

    34 Sasquatch Ale 19 $6,678.00

    35 Steeleye Stout 36 $14,536.80

    38 Cte de Blaye 24 $149,984.20

    39 Chartreuse verte 30 $13,150.80

    43 Ipoh Coffee 28 $25,079.20

    67 Laughing Lumberjack Lager 10 $2,562.00

    70 Outback Lager 39 $11,472.00

    Done 9 Internet I Protected Mode: Off *1100%

    Bn cng c th c h tr y bi tnh nng intellisense bn trong vs 2008 khi vit cc cu truy vn LINQ:

    N n r r h w i n d n a T f l C n n r p x r db = new N n r r h w i n r i n a r a r n n r p x T O ;

    var p roducts = from p in d b .p ro d uctswhere p .ca teg ory .categoryN am e "Beverages" s e le c t new {

    ID = p .P ro d u c t ID ,Name = p.ProductNam e,Numorders = p .o rd e rD e ta iIs .C o u n t ,Revenue = p .o rd e rD e ta i ls . Sum(o => o .u n it P r ic e

    };o.)V GetType

    " Order OrderlD

    f Product ProductID

    r PropertyChanged / PropertyChanging

    V ToString ' UnitPrice

    Trong v d trn, ti ang s dng mt kiu v danh (anonymous type) v dng object initialization gt gia v nh ngha cu trc t v. Mt iu thc s tuyt vi l vs 2008 cung cp intellisense y , kim tra lc dch v c refactoring khi lm vic c vi cc tp kt qu c kiu v danh:

    31

    http://localhost:493X6/Default.aspx

  • LINQ to SQL Tutorial

    f N o rth w in d D ataco n text db = new Northv.'i ndD ataC o ntext Q ;

    va r p ro d u c ts = from p i n d b .P ro d u c tswhere p .c a te g o ry .c a te g o ry N a m e = "B everag es" s e l e c t new {

    i d = p .P r o d u c t iD ,Name = p.ProductNam e,Numorders = p . o r d e r D e t a i l s . c o u n t ,Revenue = p . o r d e r o e t a i l s . s u m ( o = > o .u n i t P r i c e * o .Q u a n t i t y )

    >;

    f o r e a c h ( v a r p ro d u ct i n p r o d u c t s ){

    p ro d u c t .>

    '#! EgualsV GetHashCode v GetType

    IDif? Name J5* NumOrders

    Revenue v ToString

    6. Phan trang ket qua truv van

    Mot trong nhung yeu cau chung khi viet cac trang web la ban phai co kha nang phan trang mot each hieu qua. LINQ cung cap san hai ham mo rong cho phep ban co the lam dieu do mot cach de dang va hieu qua - ham Skip() va Take().

    Ban co the dung Skip() va Take() nhir duoi day de chi ra rang ban chi muon lay ve 10 doi tuomg san pham - bat dau tir mot san pham cho truoc ma chung ta chi ra trong tham so truyen vao:

    vo id B in d P ro d u c ts ( in t sta rtR o w ){

    NorthwindDatacontext db = new NorthwindDatacontext( ) ;

    v a r products = from p in db .P roductswhere p .o rd e rD e ta ils .c o u n t > 2 s e le c t new {

    ID = p .P ro d u ctiD ,Name = p.ProductName,Numorders = p .o rd e rD e ta ils .c o u n t ,Revenue = p .o rd e rD e ta ils .su m (o => o .u n it P r ic e

    } ;o .Q u a n t ity )

    Gridviewl.DataSource = Gridviewl. DataBind();

    pr oducts.Ski p(st artRow).Take(10);

    Chu y o tren toi da khong dung Skip() va Take() trong cau khai bao truy van cac san pham - ma chi dung toi khi gan ket du lieu vao GridView. Moi nguoi hay hoi Co phai lam nhu vay thi cau lenh dau tien se lay toan bo dir lieu tir CSDL ve lop giua, roi sau do mod thurc hien viec phan trang ?. Cau tra loi la Khong. Ly do la vi LINQ chi thuc su thvrc thi cac cau truy van khi ban lay ket qua tir no ma thoi.

    32

  • LINQ to SQL Tutorial

    Mt trong nhng u im ca m hnh ny l n cho php bn c th vit cc cu lnh phc tp bng nhiu bc, thay v phi vit trong mt cu lnh n (gip d c hn). N cng cho php bn to ra cc cu truy vn t cc cu khc, gip bn c th xy dng cc cu truy vn rt phc tp cng nh c th dng li c cc cu truy vn khc.

    Mt khi ti c phng thc BindProductO nh ngha trn, ti c th vit lnh nh di y ly v ch s u t query string, v cho php danh sch sn phm c th c hin phn trang v hin th:

    v o id Pag e_Load (o b je c t s e n d e r , E ve n tA rg s e ){

    i n t s ta r tR o w = c o n v e r t .T 0 ln t3 2 (R e q u e s t .Q u e ry S t r in g [ " s ta r tR o w " ] ) ;

    Vi.B i n d P ro d u c ts ( s t a r t R o w ) ;

    N s cho chng ta mt trang hin th cc sn phm c nhiu hn 5 n t hng, cng vi doanh thu tng ng, v c phn trang da trn tham s truyn vo qua query string:

    4$ Untitled Page - Windows Internet Explorer

    O I http://localhost:493K/Default.aspx?startRow=20 p -_ _ _____________ ^'wf & Untitled Page r a* 0 " Page J. / Tools

    P r o d u c t s

    1 NumOrders Revenue

    21 Sir R odney 's S cones 39 $9 ,636 .00

    22 G u s ta fs Knckebrd 14 $7 ,232 .40

    23 T unnbrd 20 $4 ,840 .20

    24 G uaran Fantstica 51 $4 ,782 .60

    25 NuNuCa N u-N ougat-C rem e 18 $4 ,051 .60

    26 G um br Gum m ibrchen 32 $21 ,534 .90

    27 Schoggi Schokolade 9 $15 ,231 .50

    28 Rssle S auerkrau t 33 $26 ,865 .60

    29 Thringer R o stb ra tw u rst 32 $87 ,736 .40

    30 N ord-O st M atjeshering 32 $14 ,775 .54

    Dore ^ Internet 1 Protected Mode: Off 4*100% -

    Ghi ch: Khi lm vic vi SQL 2005, LINQ to SQL s dng hm ROW_NUMBER() thc hin vic phn trang logic trong CSDL. N m bo rng ch 10 dng d liu c tr v khi chng ta thc hin cc cu lnh trn:

    33

    http://localhost:493K/Default.aspx?startRow=20

  • LINQ to SQL Tutorial

    "a? QueryResult

    ID Name NumOrders Revenue

    Sir Rodney's Seo.. 3S 9636 00000022 Gustafs Knacke... 114 7232.400000

    23 Tunnbrd 20 4840.200000

    24 Guaran Fantsti . .. 51 4782.600000

    25 NuNuCa Nu-No... 18 4051.600000

    26 Gumbr Gummib... 32 21534.900000

    27 Schoggi Schokol... 9 115231.500000

    28 Rssle Saueikraut 33 26865.600000

    29 Thringer Rostbr... 32 87736.400000

    30 Nord-Ost Matjesh.. . 32 114775.540000

    N lm cho vic phn trang hiu qu v d dng hn, c bit l vi cc tp d liu ln.

    7. Tng kt

    Hi vng cc bc trn cung cp mt ci nhn y v nhng c tnh m LINQ to SQL cung cp, tm hiu thm v cc biu thc LINQ v c php mi c dng trong C# v VB.NET trong vs 2008, xin hy tham kho thm cc bi vit sau:

    Automatic Properties, Object Initializer and Collection Initializers Extension Methods Lambda Expressions Query Syntax Anonymous Types

    Trong bi vit tip theo trong lot bi ny, ti s cho thy cch thm cc php kim tra vo m hnh d liu ca chng ta, v biu din cch chng ta c th dng a logic chng trnh vo mi ln thc thi cc cu lnh update, insert, hay delete d liu. Ti cng s cho cc bn thy cc tnh nng cao cp hn ca lazy loading v eager loading, cch dng control mi h tr vic khai bo databinding trong ASP.NET, cch gii quyt xung t...

    34

  • LINQ to SQL Tutorial

    Bi 4: Cp nht c s d liu

    Trong bi hm nay, ti s ni r hn v cch chng ta dng CSDL c m hnh ha trc y, v dng n cp nht, chnh sa v xa d liu. Ti cng s cho cc bn thy cc chng ta c th thm cc quy tc (business rule - sau ny tr i ti s nguyn t business rule, v t ny r ngha hn) v ty bin cch xc thc tnh hp l ca d liu.

    1. CSDL Northwind c m hnh ha dng LINQ to SQL

    Trong phn 2 ca lot bi ny, ti i qua cc bc to nn m hnh cc lp LINQ to SQL dng LINQ to SQL designer c trong vs 2008. Di y l s lp c to cho CSDL mu Northwind v cng s l m hnh c dng trong bi vit ny:

    Northwind.dbmf*

    Category

    - Properties

    CategorylDCategoryNameDescriptionPicture

    - Properties

    '? p OrderfD ^3* CustomerlD 2*3* EmployeelD 2* OrderDate

    Required Date Shipped Date

    * ShipVia zl? Freight r_*f ShipName zip ShipAddress ^ ShipGty ShipRegion 13* ShipPostalCode 2 ? ShipCountiy

    2 Properties

    ? ^ ProductID ^3* ProductName ^ ScpplierlD

    CtegorylD 13* QuantityPerUnit

    UnitPrice * UnitsInStock

    UnitsOnOrder z* RecrderLevel l* Discontinued

    I*

    s Properties

    OrderlD ^j* ProducUD

    'S UnitPrice "* Quantity 25* Discount

    *

    s Properties

    * CustomerlD 2* CompanyName z* ContactName tj* ContsctTitle i f Addrspoty

    Region * PostalCode * Country s Phone of* Fax

    Khi chng ta nh ngha m hnh d liu dng LINQ to SQL designer nh trn, chng ta nh ngha ra 5 lp m hnh: Product, Category, Customer, Order and OrderDetail. Cc thuc tnh ca mi lp nh x vo cc ct tng ng ong bng d liu. Mi i tng thuc lp thc th s biu din mt dng trong bng CSDL.

    Khi nh ngha m hnh d liu, LINQ to SQL designer cng to ra mt lp DataContext cung cp cc cch thc truy vn v cp nht li d liu. Trong m hnh mu chng ta nh ngha trn, lp ny c t tn l NorthwindDataContext. Lp NorthwindDataContext c cc thuc tnh biu

    35

  • LINQ to SQL Tutorial

    din cc bng chng ta nh ngha trong CSDL (Products, Categories, Customers, Orders, OrderDetails).

    Nh chng ta xem trong phn 3, chng ta cng d dng dng cc biu thc LINQ truy vn v ly d liu t CSDL bng cch dng lp NorthwindDataContext. LINQ to SQL sau s t ng din dch cc biu thc thnh cc cu lnh SQL thch hp thc thi.

    V d, chng ta c th vit biu thc LINQ nh di y ly v mt i tng Product n bng cch tm da trn tn sn phm:

    ^ N orthw indD ataC ontext n o rth w in d = new N o rth w in d D a ta C o n te x tO ; ^

    P ro d u ct m yProduct = n o rth w in d .P ro d u c ts . s in g le (p => p . ProductName == " c h a i" ) ;

    m yProduct.V GetHashCode *V Getype

    OrderDetailsj ProductlD

    IK*j ProductName string Product.ProductName^ PropertyChanged

    PropertyChangng-* QuantityPerUnitJ3* Reordertevel

    SupplierlD -

    Ti cng C th vit thm mt cu truv vn LINQ di y ly v tt c cc sn phm t CSDL m hin ti cha c n t hng, v gi tin nhiu hn $100:

    ^ N o r t h w i n d D a t a C o n t e x t northw ind = new N o r t h w i n d D a t a C o n t e x t O ;

    v a r p ro d u cts = from p in n o rth w in d .P ro d u c tswhere p .O rd e rD e ta ils .C o u n t == 0 & & p .U n it P r ic e > 100

    , s e le c t p ;

    Ch cch ti ang dng OrderDetails kt hp vi mi sn phm nh mt phn ca cu truy vn ch ly v cc sn phm khng c n t hng.

    Change Tracking v DataContext.SubmitChanges()

    When we perform queries and retrieve objects like the product instances above, LINQ to SQL will by default keep track of any changes or updates we later make to these objects. We can make any number of queries and changes we want using a LINQ to SQL DataContext, and these changes will all be tracked together.

    Khi chng ta thc hin cc cu truy vn v ly v cc i tng nh i tng product trn, LINQ to SQL s mc nhin lu li vt ca cc thao tc thay i hay cp nht m chng ta thc hin trcn cc i tng (gi l change tracking). Chng ta c th thc hin bao nhiu cu truy vn v thay i m chng ta mun bng cch dng LINQ to SQL DataContext, v tt c cc thay i s c lu vt li.

    36

  • LINQ to SQL Tutorial

    Ghi ch: Vic lu vt LINQ to SQL xy ra bn pha chng trnh gi, v khng lin quan g n CSDL. C ngha l bn khng h dng ti nguyn trn CSDL, hoc bn khng cn ci t thm hay thay i bt k th g trn CSDL cho php lm iu ny.

    Sau khi cp nht cc i tng chng ta lay t LINQ to SQL, chng ta c th gi phng thc SubmitChanges() trn lp DataContext cp nht li cc thay i ln CSDL. Vic gi phng thc ny s lm cho LINQ to SQL tnh ton ng v thc thi cc cu lnh SQL ph hp cp nht CSDL.

    Ly v d, bn c th vit cu lnh di y cp nht li gi tin v s lng om v cn li ca sn phm Chai:

    ^ N o r t h w in d D a ta C o n te x t n o r t h w in d = new No r t h wi n d D a t a C o n t e x t O ; ^

    P r o d u c t m yP ro d uct = n o r t h w i n d . P r o d u c t s . S i n g l e C p => p . ProductName == " c h a i " ) ;

    m y P r o d u c t .U n i t P r i c e = 2 ; m y P r o d u c t .U n i t s I n S t o c k = 4 ;

    , n o r t h w i n d . S u b m it c h a n g e s ( ) ; .

    Khi ti gi northwind.SubmitChanges() nh trn, LINQ to SQL s xy dng v thc thi mt cu lnh SQL UPDATE m n s cp nht li hai thuc tnh ca sn phm m chng ta sa li nh trn.

    Ti c th vit on lnh di y duyt qua danh sch cc sn phm t ph bin v gi cao, sau t li thuc tnh ReorderLevel = 0:

    /'NorthwindDataContext northw ind = new Northwi ndDataContext( ) ;

    var expensiveU npopularProducts = from p in no rth w in d .P ro d uctswhere p . O rd e rD e ta iIs .C o u n t == 0 && p .U n itP r ic e > 100 s e le c t p;

    fo reach (P roduct product in exp ensive llnp o p u larP ro d ucts) { p ro d u ct.R eo rd e rLeve l = 0 ;

    }I northwi nd. Submi tchanges o ;_____________________________________________________________________________________J

    Khi ti gi northwind.SubmitChangesQ nh trn, LINQ to SQL s tnh ton v thc thi mt tp thch hp cc pht biu UPDATE cp nht cc sn phm c thuc tnh ReorderLevel b thay i.

    Hy nh l nu gi tr ca cc thuc tnh ca i tng Product khng b thay i bi cu lnh trn, c ngha l bn thn i tng khng b thay i, th LINQ to SQL cng s khng thc thi bt k cu lnh UPDATE no trn i tng . V d, nu n gi ca i tng Chai l 2 v s san phm cn li l 4, th vic gi SubmitChanges() s chng lm thc thi bt k cu SQL no. Cng vy, ch cc sn phm trong v d th hai c ReorderLevel khng bng 0 mi c cp nht khi gi SubmitChanges().

    2. Cc v du Insert v Delete

    Ngoi vic cp nht cc dng c trong CSDL, LINQ to SQL cn cho php bn thm v xa d liu. Bn c th lm c iu ny bng vic thm/bt cc i tng d liu t cc tp hp bng

    37

  • LINQ to SQL Tutorial

    trong lp DataContext, v sau gi SubmitChanges(). LINQ to SQL s lu vt li cc thao tc ny, v t ng thc thi cu lnh SQL INSERT hay DELETE ph hp khi phng thc SubmitChangesO c gi.

    a. Thm mt sn phm

    Bn c th thm mt sn phm mi vo CSDL bng vic to ra mt i tng thuc lp Product, gn cc gi tr thuc tnh, v sau thm n vo tp hp Products ca DataContext:

    ^Northwi ndDataContext northwind = new N orthwindDataContextO ;

    Product myProduct = new P r o d u c to ; myProduct. ProductName = " S c o tt 's S p ecia l Product"; myProduct. U n itP rice = 999; myProduct. U nitsInStock = 1; myProduct.CategorylD = 1;

    northwi n d .P rod u cts. Add(myProduct);

    northw ind. Submi tchanges C);

    Khi gi SubmitChanges nh trn, mt dng mi s c thm vo bng Product.

    b. Xa cc sn phm

    Cng nh ti ni v vic thm mt sn phm mi bng cch i tng Product vo tp hp Products ca DataContext, ti cng c th lm mt cch ngc li khi mun xa mt sn phm t CSDL bng cch xa n khi tp hp ny:

    N o r t h w i n d D a t a C o n t e x t n o r t h w i n d = new N o r t h w i n d D a t a C o n t e x t O ;

    v a r lam e P ro d u cts = from p in n o r th w in d .P ro d u c tsw here p .O rd e r D e t a i ls .C o u n t > o && p.D is c o n t in u e d == t r u e s e le c t p ;

    n o r th w in d .P ro d u c ts .R e m o v e A ll( la m e P ro d u c t s ) ;

    J i o r t h w i n d . Subm i t c h a n g e s o ;____________________________________________________________________________________________

    (RcmoveAll c thay i bng DeleteOnSubmit trong phin bn hin ti)

    Ch cch ti ly mt tp hp cc sn phm khng cn c sn xut v cng khng c n t hng no bng cch dng mt cu truy vn LIN, ri sau truyn n cho phng thc RemoveAll ca tp hp Products trong DataContext. Khi gi SubmitChanges(), tt c cc sn phm s b xa khi CSDL.

    3. Cp nht thng qua cc quan h

    iu lm cho cc trnh ORM nh LINQ to SQL cc k mm d l n cho php chng ta d dng m hnh ha mi quan h gia cc bng trong m hnh d liu. V d, ti c th m hnh ha

    38

  • LINQ to SQL Tutorial

    mi Product trong mt Category, mi Order cha cc OrderDetails cho tng mc, kt hp cc OrderDctail vi mt Product, v lm cho mi Customer kt hp vi mt tp cc Order. Ti biu din cch xy dng v m hnh ha cc mi quan h trong phn 2 ca lot bi ny.

    LINQ to SQL cho php ti tn dng c u im ca cc mi quan h trong vic truy vn v cp nht d liu. V d, ti c th vit on lnh di y to mt Product mi v kt hp n vi mt category Beverages trong CSDL nh di y:

    N orthw indD ataContext n o rth w in d = new N o r th w in d D a ta C o n te x t Q ;

    // Retrieve beverages categoryC a te g o ry b eve rag es = n o r th w in d .C a te g o r ie s .S in g le fc => c.CategoryN am e == " B e v e ra g e s " ) ;

    // Create new ProductP ro d u ct m yProduct = new P ro d u c tO ;m yProduct. ProductName = "Scott's Special Product"; m y P ro d u c t .U n itP r ic e = 999 ; m y P ro d u c t .U n its In S to c k = 1 ;

    // Associate product with beverage category b e v e ra g e s . P ro d u c ts . A d d (m yP ro d u ct);

    // Update database n o rth w i n d . Submi tc h a n g e s ( ) ;

    (Add c thay i bng InsertOnSubmit trong phin bn hin ti)

    Hy ch cch ti thm mt i tng Product vo tp hp Products ca mt Category. N s ch ra rng c mt mi quan h gia hai i tng, v lm cho LNQ to SQL t ng duy tr mi quan h foreign-key/primary key gia c hai khi ti gi SubmitChanges.

    Mt v d khc cho thy LIN to SQL c th gip qun l quan h gia cc bng nh th no v gip cho vic lp trnh sng sa hn, hy xem mt v d di y khi ti to mt Order mi cho mt khch hng c. Sau khi t gi tr cho ngy chuyn hng v chi ph cho vic t hng, ti s to tip 2 mc chi tit trong n t hng ch n cc sn phm m khch hng ang mun mua. Sau , ti s kt hp on t hng vi khch hng, v cp nht cc thay i vo CSDL.

    39

  • LINQ to SQL Tutorial

    ^ N o rth w i n d D a ta C o n te x t n o rth w in d = new N o rth w in d D a ta C o n te x tO ;

    / / R e tr ie v e product d e ta ilsProduct chai = no rth w in d .P ro d ucts . S in g !e (p => p.ProductName == "C h a i" ) ;Product to fu = n o rth w in d .P ro d u cts .S in g le (p => p.ProductName == "T o fu " ) ;

    / / C reate new Order and Order l in e items fo r productsOrder myOrder = new O rd e rO ;myOrder.OrderDate = DateTime.Now;myOrder. RequiredDate = DateTime.Now.AddDays(1 ) ;m yO rder.Fre ight = 34;

    OrderDetai1 mylteml = new OrderDetai1(); m yltem l.Product = c h a i; m yltem l.Q uantity = 23;

    OrderDetai! myltem2 = new OrderDetai1(); myltem2. Product = to fu ; m yltem 2.Quantity = 3;

    / / A sso c ia te new order and order l in e items together myOrder.OrderDetaiIs.Add(mylteml); m yO rder.O rderD eta iIs . Add(myltem2);

    / / R e tr ie ve customer d e ta ilsCustomer myCustomer = northw ind.Custom ers. S in g le (c => c.CompanyName == "B 's B eve rag es");

    / / Add the order to the custom er's Orders c o lle c t io n myCustomer.Orders. Add(myOrder);

    / / Update database^northwi nd. Submi tchanges ( ) ; ________________________________________________________________________________________^

    (Add c thay i bng InsertOnSubmit trong phin bn hin ti)

    Nh bn thy, m hnh lp trnh trn cho php thc hin tt c cc cng vic ny mt cch cc k sng sa theo phong cch hng i tng.

    4. Transactions

    Mt transaction (giao dch) l mt dch v c cung cp bi mt CSDL (hoc mt trnh qun l ti nguyn khc) m bo rng mt tp cc thao tc c lp s c thc thi nh mt n v duy nht - c ngha l hoc tt c cng thnh cng, hoc cng tht bi. V trong trng hp tht bi, tt c cc thao tc l lm s b hon tc trc khi bt k thao tc no khc c cho php thc hin.

    Khi gi SubmitChanges() trn lp DataContext, cc lnh cp nht s lun c thc thi trong cng mt transaction. C ngha l CSDL ca bn s khng bao gi ong mt trng thi khng ton vn nu bn thc thi nhiu cu lnh - hoc tt c cc thao tc bn lm s c lu li, hoc khng c bt k thay i no.

    Neu khng c mt transaction ang din ra, DataContext ca LINQ to SQL s t ng bt u mt transaction bo v cc thao tc cp nht khi gi SubmitChanges(). Thm vo , LINQ to SQL cn cho php bn t nh ngha v dng i tng TransactionScope ca ring bn. iu ny lm cho vic tch hp cc lnh LINQ to SQL vo cc on m truy cp d liu c d dng hn. N cng c ngha l bn c th a c cc ti nguyn khng phi ca CSDL vo trong cng transaction. V d: bn c th gi i mt thng ip MSMQ, cp nht h thng file (s dng kh nng h tr transaction cho h thng file),... v nhm tt c cc thao tc vo trong cng mt transaction m bn dng cp nht CSDL dng LINQ to SQL.

    40

  • LINQ to SQL Tutorial

    5. Kim tra d liu v Business Logic

    Mt trong nhng iu quan trng m cc nh pht trin cn ngh n khi lm vic vi liu l lm sao kt hp c cc php xc thc d liu v cc quy tc chng trnh (business logic). LINQ to SQL cng h tr nhiu cch cc nh pht trin c th d dng tch hp chng vo vi cc m hnh d liu ca h.

    LENQ to SQL cho php bn thm kh nng xc thc d liu m khng ph thuc vo cch bn to ra m hnh d liu cng nh ngun d liu. iu ny cho php bn c th lp li cc php kim tra nhiu ch khc nhau, v lm cho m lnh sng sa v d bo tr hn rt nhiu.

    6. H tr kim tra cc gi tri thuc tnh da trn schema ca CSDL

    Khi nh ngha cc lp m hnh d liu dng LINQ to SQL designer trong vs 2008, chng s mc nhin c gn cc quy tc xc thc da trn cu trc nh ngha trong CSDL.

    Kiu d liu ca thuc tnh trong cc lp m hnh d liu s khp vi cc kiu d liu tng ng trong CSDL. iu ny c ngha l bn s gp li bin dch nu c gng gn mt gi tr kiu boolean v cho mt thuc tnh decimal, hoc nu th p kiu d liu mt cch khng hp l.

    Neu mt ct trong CSDL c nh du cho php mang gi tr NULL, khi thuc tnh tng ng ong m hnh d liu c to bi LINQ to SQL designer cng cho php NULL. Cc ct khng cho php NULL s t ng a ra cc exception nu bn c gng lu mt i tng c thuc tnh mang gi tr NULL. LINQ to SQL s m bo cc ct nh danh/duy nht khng b trng lp trong CSDL.

    Bn c th dng LINQ to SQL designer ghi ln cc quy tc xc thc da trn schema nu mun, nhng cc quy tc ny s c to ra t ng v bn khng cn lm bt k iu g cho php chng. LINQ to SQL cng t ng x l cc chui escape, do vy bn khng cn lo lng v li SQL injection.

    7. H tr ty bin vic kim tra gi tr cc thuc tnh

    Vic kim tra d liu da trn cu trc nh ngha trong CSDL rt hu ch, nhng ch c coi nh mc c bn, trong thc t c th bn s gp phi nhng yu cu kim tra phc tp hn nhiu.

    Hy xem mt v d trong CSDL Northwind, khi ti nh ngha thuc tnh Phone thuc lp Customer c kiu d liu l nvarchar. Cc nh pht trin dng LINQ to SQL c th vit code ging nh di y cp nht n vi mt so phone hp l:

    ^NorthwindDataContext northwind = new Noi'thwi ndDataContext o ;Custom er myCustomer = northwind.Customers.SingleCc => c.CompanyName == " B ' s B e v e ra g e s ) ; rayCustomer.Phone = "4 2 5 -7 0 3 -8 0 7 2 " ;

    ^Iiorthwi nd Submi tchanges () ;______________________________________________________________________ J

    Vn l on code trn c coi l hp l ng t gc kiu d liu SQL, v chui trn vn l mt chui nvarchar mc d c th n khng phi l mt so phone hp l:

    41

  • LINQ to SQL Tutorial

    NorthwindDataContext northwind = new Northwi ndDataContextO;

    Custom er myCustomer = n o r t h w in d .C u s t o m e r s . s in g le ( c => c.CompanyName = " B 's B e v e ra g e s " ) ; myCustomer.Phone = " a b s d fd s fd s fs d " ;

    no rth w i nd Submi tch an g es o ;________________________________________________________________________________________________ /

    trnh vic thm cc so phone kiu nh trn vo CSDL, chng ta c th thm mt quy tc kim tra tnh hp l vo lp Customer. Thm mt quy tc kim tra thc s n gin. Tt c nhng g chng ta cn lm l thm mt partial class vo v nh ngha phng thc nh di y:

    Customer.!______________________________________________________________________________________________________________________________ _

    ''t Customer ^OnPhoneChanging(stnng value)

    89

    1011121314

    1 |B u s in g S ystem ;2 | L u s in g S y s t e m .T e x t .R e g u la r E x p r e s s io n s ;3 j

    5

    7Regex phoneNumber = new R e g e x (@ " A [2 - 9 ] \ d {2 } - \ d { 3 } - \ d {4 } $ " ) ;

    3 p u b lic p a r t i a l c l a s s Custom er {

    p a r t i a l v o id O n P h o n e C h a n g in g (s tr in g v a lu e ) {

    i f (phoneNum ber. I s M a tc h (v a lu e ) = f a l s e ) {th ro w new E x c e p t io n C 'N o t a v a l i d phone n u m b e r!" ) ;

    }}

    on code trn tn dng u im ca 2 c tnh trong LINQ to SQL:

    1) Tt c cc lp c to ra u l partial - c ngha l nh pht trin c th d dng thm vo cc phng thc, thuc tnh v thm ch c cc s kin (v t chng trong mt file ring bit). iu ny lm cho vic thm cc quy tc xc thc v cc hm ph tr vo m hnh d liu v lp DataContext rt d dng. Bn khng cn cu hnh hay vit thm cc code no khc lm c iu ny.

    2) LINQ to SQL to sn mt lot cc im m rng trong m hnh d liu v lp DataContext m bn c th dng thm vo cc php kim tra d liu trc v sau khi thc hin cc cng vic. Nhiu trong s ng dng mt c tnh ngn ng mi c gi l partial method c trong VB v C# c trong vs 2008 beta 2. Wes Dyer trong nhm C# c mt bi ni v cch cc partial method lm vic ti y.

    Trong v d v vic kim tra tnh hp l d liu trn, ti dng phng thc OnPhoneChanging, y l mt phng thc s c thc thi bt k lc no ngi dng gn li gi tr cho thuc tnh Phone trn mt i tng Customer. Ti c th dng phng thc ny xc thc gi tr u vo theo bt k cch g ti mun (trong v d ny, ti dng mt biu thc chnh quy). Nu gi tr hp l, ti ch n gin return v khng lm g c, khi LINQ to SQL s cho l cc gi tr ny l gi tr hp l, ngc li ti c th pht ra mt Exception bn trong phng thc kim tra, v php gn khi s khng c thc hin.

    8. H tr ty bin vic kim tra tnh hp l ca thc th

    Vic kim a trcn tng thuc tnh nh trong cc v d trn rt hu dng khi bn mun kim tra gi tr ca tm thuc tnh ring l. Nhng i khi, bn s cn phi kim t o da trn nhiu gi tr ca cc thuc tnh khc nhau.

    42

  • LINQ to SQL Tutorial

    Hy xem v d sau, ti s t gi tr cho 2 thuc tnh OrderDate v RequiredDate :

    f NorthwindDataContext northwind = new N orthw indDataContextO ^Order myOrder = new O rderC); myOrder.OrderDate = DateTime.Now; myOrder. RequiredDate = DateT im e.Now.AddDays( - 1 ) ;

    northwi nd. O rd e rs . Add(myOrder); northwi nd. Submi tChangesO ;

    (Add c thay i bng InsertOnSubmit trong phin bn hin ti)

    on lnh trn l hp l nu ch on thun xt t gc ngn ng - nhng s l khng c ngha khi bn li mun t ngy khch hng yu cu trc ngy t hng.

    Tin vui l t bn LINQ to SQL beta 2, chng ta c th thm vo cc quy tc kim tra cho tng thc th trnh cc li kiu nh trn bng cch thm mt lp partial cho lp Order v hin thc ha hm OnValidate(), hm ny s c gi trc khi d liu c a vo CSDL. Bn trong phng thc ny, chng ta c th truy cp v kim tra tt c cc thuc tnh ca lp trong m hnh d liu.

    Order.cs

    Order OnValidateO

    5678 9

    10 11 1 ?

    l us ing System;2LB|3pub1ic p a r t i a l c la s s Order {

    4 p a r t i a l vo id O nV a lid a teO {i f (RequiredDate < OrderDate) {

    throw new E x c e p t ion("D e1 iver date i s before Orde}

    }

    Bn trong phng thc ny, bn c th kim tra gi tr bt k thuc tnh no, v thm ch c th truy cp (ch c) vo cc i tng lin quan, v c th pht ra mt exception nu c tn ti cc gi tr khng hp l. Bt k mt exception no c pht ra t phng thc OnValidateO s lm cho vic cp nht b hy b, v hy b cc thay i trong transaction.

    9. Ty bin cc phng thc kim tra vic thm /xa/sa d liu

    C nhiu lc bn mun thm cc php kim tra khi thm/xa/sa d liu. LINQ to SQL Beta2 cho php lm iu ny bng cch cho php bn thm vo mt lp partial m rng lp DataContext v sau hin thc ha cc phng thc ty bin cc thao tc thm/xa/sa cho cc thc th. Cc thc ny s c thc thi t ng khi bn gi SubmitChangesO trn lp DataContext.

    43

  • LINQ to SQL Tutorial

    Bn c th thm cc php kim tra thch hp vo bn trong cc phng thc - v nu d liu hp l, LINQ to SQL s tip tc lu li cc thay i vo CSDL (bng cch gi phng thc ExecuteDynamicXYZ cua DataContext).

    NorthwindDataContext.es

    'i NorthwindDataContext

    9101112 ]1314151617181920 21 222324251C

    u s in g System ;

    p u b lic p a r t ia l c la s s NorthwindDataContext {

    p a r t ia l v o id In s e rtO rd e r(O rd e r in s ta n c e ) {

    / / to do : add custom in s e r t v a l id a t io n lo g ic

    th i s . ExecuteDynam i c ln s e r t ( i n s t a n c e ) ;}

    partial void UpdateOrder(Order instance){

    // todo: add custom update validation logic

    }t h i s . ExecuteDynam i c U p d a te ( in s ta n c e ) ;

    p a r t ia l v o id D e le teO rd er(O rd er in s ta n c e ){

    / / todo : add custom d e le te v a l id a t io n lo g ic

    t h i s . ExecuteDynam i c D e le te ( i n s t a n c e ) ;

    }

    Mt trong nhng iu th v l cc phng thc ph hp s c gi t ng, khng ph thuc vo n cnh m i tng c to/xa/sa. Hy xem v d sau, y ti mun to mt Order mi v kt hp n vi mt Customer c:

    /" N o rth w in d D a taC o n tex t n o rth w in d = new N o rth w in d D a ta C o n te x tO ;

    // R e t r ie v e custom erCustom er myCustomer = n o r th w in d .C u s to m e rs .S in g le (c => c.CompanyName == " M ic r o s o f t " ) ;

    / / C re a te new O rder O rder myOrder = new O rd e r ( ) ; m yO rd er.O rd e rD ate = D ateT im e.N ow ; m yO rd e r.S h ip A d d re ss = "One M ic ro s o f t W ay"; m yO rd e r .S h ip P o sta lC o d e = "9 8 0 5 2 " ;

    /'/ A s s o c ia t e o rd e r w ith custom er m yC u sto m er.O rd e rs . A d d (m yO rd er);

    / / Update changes i^ northw i n d . Submi tc h a n g e s ( ) ;

    (Add c thay i bng InsertOnSubmit trong phin bn hin ti)

    Khi ti gi northwind.SubmitChanges() trn, LINQ to SQL s xc nh l n cn lu li mt i tng Order, v phng thc InsertOrder s t ng c gi.

    10. Nng cao: Xem danh sch thay i cho Transaction

    i khi bn mun thm cc quy tc kim tra m khng th ch da trn tng thao tc thm/xa/sa ring l, thay vo bn phi c th duyt qua ton b cc thao tc thc hin trong transaction.

    44

  • LINQ to SQL Tutorial

    Bt u t bn Beta2 ca .NET 3.5, LINQ to SQL cho php bn truy cp vo danh sch ny bng cch gi phng thc DataContext.GetChangeList(). N s tr v mt i tng ChangeList cha cc tp hp cho cc thao tc thm/xa/sa c thc hin.

    Mt cch tip cn l bn c th to mt lp tha k t lp DataContext v override phng thc SubmitChanges(). Khi bn c th ly ChangeListO cho thao tc cp nht v thc hin cc php kim tra cn thit trc khi thc thi:

    ^publTC class M yN orthw indDataContext : N o rth w indD ataC ontext ^{

    public override void SubmitChanges(System.Data.Linq.Confl ic iMode failureMode){

    ChangeSet changes = this.GetChangeSetO;

    changes.

    I f e l AddedEntities System.Collection5.Generic.IList ChangeSct.AddedEntities* EqualsV GetHashCodeV GetType

    2? ModifiedEntities RemovedEntities

    V ToString

    base.Submitchanges(fai 1ureMode);}_______________________J

    11. X l cc thay i ng thi vi Optimistic Concurrency;

    Mt trong nhng vn m cc nh pht trin phi ngh n trong mi trng a ngi dng l lm th no c th x l cc thao tc cp nht trn cc cng mt tp d liu. V d, cho l c hai ngi dng ang cng ly v mt i tng product bn ong mt ng dng, v mt ngi t li gi tr cho ReorderLevel l 0, trong khi ngi kia t li l 1. Neu c hai ngi dng u lu li cc thay i vo CSDL, nh pht trin cn cn nhc vic x l tranh chp d liu.

    Mt cch tip cn n gin l let the last writer win (ngi cui cng l ngi chin thng) - c ngha l nhng thay i bi ngi u tin s b thay i m khng bit. V iu ny thng c coi l mt tri nghim km ci (v khng ng) - c ngha ngi dng s cm thy kh s dng.

    Mt cch tip cn khc m LINQ to SQL h tr l dng m hnh optimistic concuency - khi LINQ to SQL s t ng xc nh xem gi tr gc trong CSDL b tha)' i b ngi dng khc hay cha. LINQ to SQL sau s cung cp mt danh sch cc gi tr b xung t ngi pht trin c th chn gii php x l hoc c th yu cu ngi dng chn mt thao tc no h mun.

    Ti s ni v cch dng optimistic concuency vi LINQ to SQL trong cc bi vit khc.

    12. Dng SPROCs hoc ty bin logic cc cu SQL:

    Mt trong nhng cu hi m cc nh pht trin (v c bit l cc DBA - cc nh qun tr CSDL), nhng ngi tng vit cc th tc (SPROC) vi cc cu SQL ty bin thng hi khi nhn thy LINQ to SQL ln u tin l: lm sao ti c th kim sot hon ton cc cu lnh SQL c thc thi ben di ?

    45

  • LINQ to SQL Tutorial

    Mt tin tt l LINQ to SQL c mt m hnh cc k mm do, n cho php cc nh pht trin c th thay th cc cu lnh caLINQ to SQL bng cc th tc insert, update, delete m h t nh ngha.

    iu thc s th v l bn c th bt u bng cch nh ngha m hnh d liu ca ring bn v LINQ to SQL t thc hin cc thao tc thm/sa/xa. Ri sau bn c th ty bin li m hnh d liu thc hin cc thao tc cp nht vi cc th tc hoc cc cu SQL ca bn m khng phi thay i bt k on lnh no dng m hnh d liu , v cng chng phi thay i bt k quy tc kim tra to trc . iu ny cung cp kh nng ty bin rt ln cho bn khi xy dng ng dng.

    Ti cng s ni k hon v cch ty bin m hnh d liu dng cc th tc hay cu lnh SQL trong mt bi vit khc.

    46

  • LINQ to SQL Tutorial

    Bi 5: S dng asp:LinqDataSource

    Trong bi vit ny, ti s khm ph control mi c trong ASP.NET thuc phin bn .NET 3.5. Control ny l mt datasource control mi cho ASP.NET (ging ObjectDataSource v SQLDataSource c trong ASP.NET 2.0) cho php bn khai bo vic gn kt d liu vo m hnh d liu ca LINQ to SQL cc k d dng.

    1. ng dung mu m chng ta s xy dng:

    Chng trnh web chnh sa d liu n gin m ti s xy dng qua cc bc c m t trong bi ny s l mt chng trinh cho php nhp/chnh sa d liu cho cc sn phm trong mt CSDL:

    & Untitled Page - W indows In ternet Explorer

    v(. | '0 , http://localhost60290/Products.aspx

    i i & Untitled Page

    Product Manager

    Pick Category: Beverages

    ProductsProductN am e

    Edit D ele te c h a i

    U pdate Cancel Guaran Fantstica

    Exotic Liquids $100.00

    Edit D elete S asq u a tc h Ale

    Edit D elete S te e le y e S tout

    Edit D ele te C te d e Blaye

    Edit D ele te C h a rtre u se v e rte

    Edit D elete Ipoh C offee

    Edit D eleteLaughing L um berjack Lager

    Edit D ele te O utback Lager

    Edit D elete R hbnbrau K losterb ier

    1 2

    Refrescos Americanas LTDA 5.5000Exotic Liquids

    $ 15.00New Orleans Cajun DelightsGrancma Kellys HomesteadTokyc Traders $13.00Cooperativa de Quesos Las Cabras

    $263 .50Mayumi'sPavlova. Ltd

    518.00Specialty Biscuits. Ltd.PB Knckebrd AB

    $45 .0 0Refrescos Americanas LTDAHeli Swaren GmbH & Co KGPlutzer Lebensmittelgromrkte AG $ 14.00Nord-Ost-Fisch Handelsgesellschaft mbHFormaggi Fortini s.r.l. $ 15.00Norske MeierierBigfoot Breweries $7 .75Svensk Sjfda ABAux joyeux ecclsiastiquesNew England Seafood CanneryLeka Trading

    Chng trnh s h tr ngi dng cc tnh nng sau:

    1. Cho php ngi dng lc sn phm theo phn loi.2. Cho php ngi dng sp xp cc sn phm bng cch nhp chut ln tiu ct (Name, Price, Units

    In Stock, ...).3. Cho php ngi dng phn trang cc sn phm (10 sn phm mi trang).4. Cho php ngi dng chnh sa v cp nht cc chi tit sn phm ngay trn trang.5. Cho php ngi dng xa cc sn phm trong danh sch.

    ng dng web ny s c xy dng vi mt m hnh d liu hng i tng dng LINQ to SQL.

    47

    http://localhost60290/Products.aspx

  • LINQ to SQL Tutorial

    Tt c cc quy tc x l v kim tra d liu s c xy dng trong lp d liu - m khng phi trong lp giao din. iu ny s m bo rng: 1) mt tp cc quy tc x l ng nht s c dng tt c mi ch trong ng dng, 2) chng ta s phi vit t code m khng cn lp li, v 3) c th d dng chnh sa/thay i cc quy tc x l sau ny m khng cn cp nht li chng nhiu ch khc nhau ong ng dng.

    Chng ta cng s tn dng c u im ca vic phn trang/sp xp bn trong LINQ to SQL m bo rng cc c tnh khng c thc hin bn trong lp gia middle-tier), m s c thc hin trong CSDL (c ngha l ch c 10 sn phm c ly ra trong CSDL ti mt thi im, chng ta s khng ly hng ngn dng ri mi thc hin phn trang hay sp xp trn web server).

    2. l g v n gip g cho chng ta?

    Control l mt ASP.NET control hin thc ha m hnh DataSourceControl c gii thiu trong ASP.NET 2.0. N tng t nh cc control ObjectDataSource v SqlDataSource, bn c th dng n khai bo vic gn ni d liu gia mt control ASP.NET vi mt ngun d liu. im khc bit l thay v no gn ni trc tip vo CSDL (nh SqlDataSource) hay vo mt lp (ObjectDataSource), c thit k gn vo mt m hnh d liu LINQ.

    Mt trong nhng u im ca vic dng l n tn dng c tnh mm do ca cc trinh cung cp LINQ (LINQ provider: nh LINQ to SQL, LINQ to Object...). Bn khng cn nh ngha cc phng thc query/insert/update/delete cho ngun d liu gi, thay vo bn c th tr n m hnh d liu ca bn, ch ra bn thc th no bn mun lm vic, ri gn ni n vo mt control Asp.NET v cho php chng lm vic vi nhau.

    V d, xy dng mt danh sch c bn cc sn phm cho php lm vic vi cc thc th Product trong m hnh d liu LINQ to SQL, ti c th khai bo mt th trn trang v tr vo lp datacontext ca LINQ to SQL, v ch ra cc thc th (v d: Products) trong m hnh LENQ to SQL m ti mun gn ni. Ti c th cho mt GridView tr vo n (bng cch t thuc tnh DataSourcelD) cho php xem cc Product theo dng li:

    < a s p :G r i dvi ew ID = "G r i dvi e w l" D a ta S o u rc e ID = "S u p p lie r D a ta S o u rc e "A l lo w P a g in g = " t ru e "A l1o w S o r t i n g = " tru e " r u n a t = " s e r v e r " />

    < a sp : L i n q D a ta S o u rce ID = " S u p p li e rD a ta S o u rc e "ContextTypeN am e= "W ebAppli c a t i o n l2 . N o rth w i n d D a ta C o n te x t" T a b leN am e= "P rod ucts"E n a b le u p d a te = " tru e " E n a b le D e le t e = " t r u e " ru n a t= s e r v e r " />

    Khng cn lm thm bt k iu g, ti c th thc thi trang web v c mt danh sch cc Product vi kh nng phn trang cng nh sp xp c tch hp sn. Ti cng c th thm mt nt edit/delete v cho php ngi dng chinh sa d liu. Ti khng cn thm bt k phng thc, nh x cc tham s, hay thm ch vit bt k cu lnh no cho x l cc trng hp hin th v cp nht trn - n c th lm vic vi m hnh LINQ to SQL m chng ta ch n v thc hin cc thao tc t ng. Khi cp nht, LINQ to SQL s m bo rng cc quy tc x l v kim tra d liu m ta thm vo m hnh LINQ to SQL (di dng cc phng thc partial) cng s c thc hin trc khi d liu c thc s cp nht vo CSDL.

    48

  • LINQ to SQL Tutorial

    Quan trong: Mpt trong nhung diem hay cua LINQ hay LINQ to SQL la no khong dirge thiet ke de chi lam viec vai lap giao dien, hay vai mot control cu the nao nhu LinqDataSource. Nhu ban da thay trong cac bai viet truac cua cimg loat bai nay, viet code dung LINQ to SQL cuc ky sang sua. Ban luon co the viet them cac ma lenh tuy bien de lam viec true tiep vai mo hinh du lieu LINQ to SQL neu muon, hay trong mot ngir canh nao do ma khong phu hap de dung.

    Cac phan duoi day se mo ta timg buac tao nen ung dung web toi da noi a tren bang each dung LINQ to SQL va .

    Birfrc 1: Dinh nghia mo hinh du~ lieu

    Chung ta se bat dau viec tao ra ung dung bang cach dinh nghla mo hinh du lieu de bieu dien CSDL.

    Toi da noi v cach tao mot mo hinh du lieu LINQ to SQL dung trinh soan thao co trong VS 2008 trong bai 2. Dudi day la anh chup man hinh cac lap du lieu ma toi co the nhanh chong tao ra dung LINQ to SQ1 designer de mo hinh hoa CSDL Northwind:

    Northwind.dbml*

    C atego ry

    Properties

    ? CategorylD 23* CategoryName 2f* Description 2=P Picture

    S upplie r

    Q Properties

    f 23* Supplier2S1 CompanyName2fp ContactName2P ContactTitle23* Address^ City2S* Region

    PostalCode

    23* Country23* Phone23* Fax2* HomePage

    /

    Product

    Properties

    .? 3 * ProductID 23* ProductName 3 * SupplieriD 2lP CategorylD 2"? QuantityPerUnit 23s UnitPrice 23* UnitsInStock

    UnitsOnOrder 231 ReorderLevel 2 ? Discontinued

    O rderD etail

    Properties

    ? ;Sp OrderlD f-S* ProductID

    3 * UnitPrice Quantity

    2S1 Discount

    _2_

    rC ustom er

    ~ Properties

    >if CustomerlD2p CompanyNam e2=P ContactN am e2* ContactTitle2lP AddressJ * City2=P Region2* PostalCode2=P CountryJp Phone"S Fax

    Order

    ^ Properties

    * P OrderlD

    flP CustomerlD

    s r EmployeelD

    OrderDate

    & RequiredDatea Shipped Date

    ShipVia

    2 p Freight

    s f ShipName

    ShipAddressShipCity

    a * ShipRegion

    3 s ShipPostalCodeShipCountry

    Toi se duyet lai mo hinh nay trong buac 5 khi toi them mot so quy tac kiem tra, nhung trong giai doan dau, toi se van dung no (chua chinh sua) de tao giao dien.

    49

  • LINQ to SQL Tutorial

    Bc 2 ; To danh sch sn phm

    Chng ta s bt u phn giao din bng cch to mt trang ASP.NET vi mt control v dng css nh dng:

    Client Objects & Events (No Events)

    Products

    3 < a s p :G r id V ie w ID = " G r idvie w l" C s s C la s s = " g r id v ie w "A l t e r n a t i n g R o w S ty le - C s s d a s s= "e v e n " r u n a t = " s e r v e r " />

    L < / a s p : C o n t e n t >I I

    Chng ta c th vit code gn ni m hnh d liu vo gridview ny (ging nh ti lm trong phn 3), hoc ti c th lm cch khc l dng control mi gn ni gidview ny vi m hnh d liu.

    vs 2008 includes build-in designer support to make it easy to connect up our GridView (or any other ASP.NET server control) to LINQ data. To bind our grid above to die data model we created earlier, we can switch into design-view, select the GridView, and then select the New Data Source.. option within the Choose Data Source: drop-down:

    Trnh thit k trong vs 2008 c sn kh nng h tr lm iu ny mt cch d dng vi Grid View (hay bt k control ASP.NET no khc) vo d liu LINQ. gn ni, chng ta c th chuyn sang ch thit k, chn GridView, v sau chn New Data Source... bn trong dang sch Choose Data Source: :

    llColumn2 1

    abc

    abc Finish Cancel

    Chung ta mun chon m hinh d liu d dugc tao truc dy vd trinh thit k LINQ to SQL. Chng ta cng s mun chon bng du liu bn trong m hinh d liu m chng ta s coi nhu thuc th chinh

    51

  • LINQ to SQL Tutorial

    d lm vic vi . Trong vi dy ny chng ta s chpn thyc th Products. Chng ta cng s nhn vo nt Advanced v cho php vic cp nht cng nhir xa d lieu:

    Configure Data Source - ProductDataSource ,

    Configure Data Selection

    Table

    Products (Table

  • LINQ to SQL Tutorial

    Common GridView tasks

    A uto Format...

    Choose Data Source: ProductD ataSource

    Configure Data Source...

    Refresh Schem a

    Edit Columns...

    Add New Column...

    M ove C olum n Right

    Remove Colum n

    f \ J Enable Paging

    [2] Enable Sorting

    (2l Enable Editing

    ^ 0 Enable Deleting

    Q Enable Selection

    Add Extender...

    Edit Tem plates

    Chng ta c th nhn F5 thc thi, v c mt trang hin th danh sch sn phm vi y kh nng phn trang cng nh sp xp cc ct:

    1 Products1 ProductName Supplier Category QuantityPerUnit UnitPrice UnitslnStock UnitsOnOrder Discontinued

    Edit Delete Chai 1 110 boxes x 20 hags 100.0000 39 0

    Ed Delete Chang 1 124 - 1