System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 748bec674cebf41d008e2fdf10eb23e665f95511:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74  */....using Syst
0130: 65 6d 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  em;..using Syste
0140: 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f 6e 3b 0d 0a  m.Data.Common;..
0150: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
0160: 67 6e 6f 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67  gnostics;..using
0170: 20 53 79 73 74 65 6d 2e 4c 69 6e 71 3b 0d 0a 75   System.Linq;..u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 65 66 6c  sing System.Refl
0190: 65 63 74 69 6f 6e 3b 0d 0a 75 73 69 6e 67 20 53  ection;..using S
01a0: 79 73 74 65 6d 2e 54 65 78 74 3b 0d 0a 75 73 69  ystem.Text;..usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 54 72 61 6e 73 61  ng System.Transa
01c0: 63 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20 55  ctions;....#if U
01d0: 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57  SE_ENTITY_FRAMEW
01e0: 4f 52 4b 5f 36 0d 0a 75 73 69 6e 67 20 53 79 73  ORK_6..using Sys
01f0: 74 65 6d 2e 44 61 74 61 2e 45 6e 74 69 74 79 2e  tem.Data.Entity.
0200: 43 6f 72 65 2e 45 6e 74 69 74 79 43 6c 69 65 6e  Core.EntityClien
0210: 74 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  t;..using System
0220: 2e 44 61 74 61 2e 45 6e 74 69 74 79 2e 43 6f 72  .Data.Entity.Cor
0230: 65 2e 4f 62 6a 65 63 74 73 3b 0d 0a 23 65 6c 73  e.Objects;..#els
0240: 65 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  e..using System.
0250: 44 61 74 61 2e 45 6e 74 69 74 79 43 6c 69 65 6e  Data.EntityClien
0260: 74 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  t;..using System
0270: 2e 44 61 74 61 2e 4f 62 6a 65 63 74 73 3b 0d 0a  .Data.Objects;..
0280: 23 65 6e 64 69 66 0d 0a 0d 0a 6e 61 6d 65 73 70  #endif....namesp
0290: 61 63 65 20 74 65 73 74 6c 69 6e 71 0d 0a 7b 0d  ace testlinq..{.
02a0: 0a 20 20 63 6c 61 73 73 20 50 72 6f 67 72 61 6d  .  class Program
02b0: 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 70 72 69  ..  {..      pri
02c0: 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
02d0: 4d 61 69 6e 28 73 74 72 69 6e 67 5b 5d 20 61 72  Main(string[] ar
02e0: 67 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  gs)..      {..  
02f0: 20 20 20 20 20 20 20 20 69 66 20 28 45 6e 76 69          if (Envi
0300: 72 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72  ronment.GetEnvir
0310: 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22  onmentVariable("
0320: 42 52 45 41 4b 22 29 20 21 3d 20 6e 75 6c 6c 29  BREAK") != null)
0330: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
0350: 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d  sole.WriteLine(.
0360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0370: 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62     "Attach a deb
0380: 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73  ugger to process
0390: 20 7b 30 7d 20 61 6e 64 20 70 72 65 73 73 20 61   {0} and press a
03a0: 6e 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e  ny key to contin
03b0: 75 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ue.",..         
03c0: 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 73           Process
03d0: 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65  .GetCurrentProce
03e0: 73 73 28 29 2e 49 64 29 3b 0d 0a 0d 0a 20 20 20  ss().Id);....   
03f0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
0410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0420: 20 20 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b     Console.ReadK
0430: 65 79 28 74 72 75 65 29 3b 20 2f 2a 20 74 68 72  ey(true); /* thr
0440: 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
0450: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
0460: 20 20 20 20 20 20 63 61 74 63 68 20 28 49 6e 76        catch (Inv
0470: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
0480: 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f  eption) // Conso
0490: 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20 20 20  le.ReadKey..    
04a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
04b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
04c0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
04e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
04f0: 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b 28 29  Debugger.Break()
0500: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
0510: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
0520: 6e 67 20 61 72 67 20 3d 20 6e 75 6c 6c 3b 0d 0a  ng arg = null;..
0530: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
0540: 28 61 72 67 73 20 21 3d 20 6e 75 6c 6c 29 20 26  (args != null) &
0550: 26 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20 3e  & (args.Length >
0560: 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20   0))..          
0570: 20 20 20 20 61 72 67 20 3d 20 61 72 67 73 5b 30      arg = args[0
0580: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
0590: 69 66 20 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29  if (arg == null)
05a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
05b0: 61 72 67 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20  arg = "";....   
05c0: 20 20 20 20 20 20 20 61 72 67 20 3d 20 61 72 67         arg = arg
05d0: 2e 54 72 69 6d 28 29 2e 54 72 69 6d 53 74 61 72  .Trim().TrimStar
05e0: 74 28 27 2d 27 2c 20 27 2f 27 29 2e 54 6f 4c 6f  t('-', '/').ToLo
05f0: 77 65 72 49 6e 76 61 72 69 61 6e 74 28 29 3b 0d  werInvariant();.
0600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 77 69  ...          swi
0610: 74 63 68 20 28 61 72 67 29 0d 0a 20 20 20 20 20  tch (arg)..     
0620: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0630: 20 20 20 20 20 20 63 61 73 65 20 22 22 3a 20 2f        case "": /
0640: 2f 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 0d 0a  / String.Empty..
0650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
0660: 73 65 20 22 6f 6c 64 22 3a 0d 0a 20 20 20 20 20  se "old":..     
0670: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
0680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0690: 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f 6c 64        return Old
06a0: 54 65 73 74 73 28 29 3b 0d 0a 20 20 20 20 20 20  Tests();..      
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
06d0: 65 20 22 64 61 74 65 74 69 6d 65 22 3a 0d 0a 20  e "datetime":.. 
06e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0700: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0710: 20 44 61 74 65 54 69 6d 65 54 65 73 74 28 29 3b   DateTimeTest();
0720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0730: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
0740: 20 20 20 20 20 63 61 73 65 20 22 64 61 74 65 74       case "datet
0750: 69 6d 65 32 22 3a 0d 0a 20 20 20 20 20 20 20 20  ime2":..        
0760: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0780: 20 20 20 73 74 72 69 6e 67 20 64 61 74 65 54 69     string dateTi
0790: 6d 65 46 6f 72 6d 61 74 20 3d 20 6e 75 6c 6c 3b  meFormat = null;
07a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
07b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
07c0: 67 73 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  gs.Length > 1)..
07d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07e0: 20 20 20 20 20 20 20 20 20 20 64 61 74 65 54 69            dateTi
07f0: 6d 65 46 6f 72 6d 61 74 20 3d 20 61 72 67 73 5b  meFormat = args[
0800: 31 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  1];....         
0810: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74               Dat
0820: 65 54 69 6d 65 54 65 73 74 32 28 64 61 74 65 54  eTimeTest2(dateT
0830: 69 6d 65 46 6f 72 6d 61 74 29 3b 0d 0a 20 20 20  imeFormat);..   
0840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0850: 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20     return 0;..  
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0870: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
0880: 20 63 61 73 65 20 22 73 6b 69 70 22 3a 0d 0a 20   case "skip":.. 
0890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
08b0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70 61            int pa
08c0: 67 65 53 69 7a 65 20 3d 20 30 3b 0d 0a 0d 0a 20  geSize = 0;.... 
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08e0: 20 20 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65       if (args.Le
08f0: 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20  ngth > 1)..     
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
0930: 67 20 3d 20 61 72 67 73 5b 31 5d 3b 0d 0a 0d 0a  g = args[1];....
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0950: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
0960: 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  g != null)..    
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 20 20 20 20 20 20 20 20 20 20 70 61 67 65 53 69            pageSi
0990: 7a 65 20 3d 20 69 6e 74 2e 50 61 72 73 65 28 61  ze = int.Parse(a
09a0: 72 67 2e 54 72 69 6d 28 29 29 3b 0d 0a 20 20 20  rg.Trim());..   
09b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
09e0: 74 75 72 6e 20 53 6b 69 70 54 65 73 74 28 70 61  turn SkipTest(pa
09f0: 67 65 53 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20  geSize);..      
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
0a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
0a20: 65 20 22 75 6e 69 6f 6e 61 6c 6c 22 3a 0d 0a 20  e "unionall":.. 
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0a50: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0a60: 20 55 6e 69 6f 6e 41 6c 6c 54 65 73 74 28 29 3b   UnionAllTest();
0a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0a80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
0a90: 20 20 20 20 20 63 61 73 65 20 22 65 6e 64 73 77       case "endsw
0aa0: 69 74 68 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  ith":..         
0ab0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ad0: 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 3d    string value =
0ae0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b00: 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20  if (args.Length 
0b10: 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 1)..          
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b40: 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d           value =
0b50: 20 61 72 67 73 5b 31 5d 3b 0d 0a 0d 0a 20 20 20   args[1];....   
0b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b70: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
0b80: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ba0: 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d           value =
0bb0: 20 76 61 6c 75 65 2e 54 72 69 6d 28 29 3b 0d 0a   value.Trim();..
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bf0: 20 72 65 74 75 72 6e 20 45 6e 64 73 57 69 74 68   return EndsWith
0c00: 54 65 73 74 28 76 61 6c 75 65 29 3b 0d 0a 20 20  Test(value);..  
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
0c30: 20 63 61 73 65 20 22 73 74 61 72 74 73 77 69 74   case "startswit
0c40: 68 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h":..           
0c50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c70: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 3d 20 6e  string value = n
0c80: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
0ca0: 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20 3e 20   (args.Length > 
0cb0: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
0cc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 61         value = a
0cf0: 72 67 73 5b 31 5d 3b 0d 0a 0d 0a 20 20 20 20 20  rgs[1];....     
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d10: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 21       if (value !
0d20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
0d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d40: 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 76         value = v
0d50: 61 6c 75 65 2e 54 72 69 6d 28 29 3b 0d 0a 20 20  alue.Trim();..  
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
0d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
0d90: 65 74 75 72 6e 20 53 74 61 72 74 73 57 69 74 68  eturn StartsWith
0da0: 54 65 73 74 28 76 61 6c 75 65 29 3b 0d 0a 20 20  Test(value);..  
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
0dd0: 20 63 61 73 65 20 22 65 66 74 72 61 6e 73 61 63   case "eftransac
0de0: 74 69 6f 6e 22 3a 0d 0a 20 20 20 20 20 20 20 20  tion":..        
0df0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e10: 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 20 3d 20     bool value = 
0e20: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e40: 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20  if (args.Length 
0e50: 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 1)..          
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e80: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 62 6f           if (!bo
0e90: 6f 6c 2e 54 72 79 50 61 72 73 65 28 61 72 67 73  ol.TryParse(args
0ea0: 5b 31 5d 2c 20 6f 75 74 20 76 61 6c 75 65 29 29  [1], out value))
0eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
0ef0: 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d  sole.WriteLine(.
0f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f20: 20 20 20 22 63 61 6e 6e 6f 74 20 70 61 72 73 65     "cannot parse
0f30: 20 5c 22 7b 30 7d 5c 22 20 61 73 20 62 6f 6f 6c   \"{0}\" as bool
0f40: 65 61 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ean",..         
0f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f60: 20 20 20 20 20 20 20 20 20 61 72 67 73 5b 31 5d           args[1]
0f70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
0f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f90: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20      return 1;.. 
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
0ff0: 75 72 6e 20 45 46 54 72 61 6e 73 61 63 74 69 6f  urn EFTransactio
1000: 6e 54 65 73 74 28 76 61 6c 75 65 29 3b 0d 0a 20  nTest(value);.. 
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1020: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1030: 20 20 63 61 73 65 20 22 75 70 64 61 74 65 22 3a    case "update":
1040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1070: 75 72 6e 20 55 70 64 61 74 65 54 65 73 74 28 29  urn UpdateTest()
1080: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1090: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10a0: 20 20 20 20 20 20 63 61 73 65 20 22 62 69 6e 61        case "bina
10b0: 72 79 67 75 69 64 22 3a 0d 0a 20 20 20 20 20 20  ryguid":..      
10c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e0: 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 20       bool value 
10f0: 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
1100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1110: 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74    if (args.Lengt
1120: 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20  h > 1)..        
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1150: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1160: 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28 61 72  bool.TryParse(ar
1170: 67 73 5b 31 5d 2c 20 6f 75 74 20 76 61 6c 75 65  gs[1], out value
1180: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
11c0: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65  onsole.WriteLine
11d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f0: 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 70 61 72       "cannot par
1200: 73 65 20 5c 22 7b 30 7d 5c 22 20 61 73 20 62 6f  se \"{0}\" as bo
1210: 6f 6c 65 61 6e 22 2c 0d 0a 20 20 20 20 20 20 20  olean",..       
1220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1230: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 5b             args[
1240: 31 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  1]);....        
1250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0d        return 1;.
1270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
12c0: 65 74 75 72 6e 20 42 69 6e 61 72 79 47 75 69 64  eturn BinaryGuid
12d0: 54 65 73 74 28 76 61 6c 75 65 29 3b 0d 0a 20 20  Test(value);..  
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1300: 20 63 61 73 65 20 22 62 69 6e 61 72 79 67 75 69   case "binarygui
1310: 64 32 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  d2":..          
1320: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1340: 20 62 6f 6f 6c 20 76 61 6c 75 65 20 3d 20 66 61   bool value = fa
1350: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1370: 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20 3e 20   (args.Length > 
1380: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
1390: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b0: 20 20 20 20 20 20 20 69 66 20 28 21 62 6f 6f 6c         if (!bool
13c0: 2e 54 72 79 50 61 72 73 65 28 61 72 67 73 5b 31  .TryParse(args[1
13d0: 5d 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a  ], out value))..
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
1420: 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20  le.WriteLine(.. 
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1450: 20 22 63 61 6e 6e 6f 74 20 70 61 72 73 65 20 5c   "cannot parse \
1460: 22 7b 30 7d 5c 22 20 61 73 20 62 6f 6f 6c 65 61  "{0}\" as boolea
1470: 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n",..           
1480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1490: 20 20 20 20 20 20 20 61 72 67 73 5b 31 5d 29 3b         args[1]);
14a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c0: 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20    return 1;..   
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
14f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1500: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1520: 6e 20 42 69 6e 61 72 79 47 75 69 64 54 65 73 74  n BinaryGuidTest
1530: 32 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  2(value);..     
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1560: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
1570: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1590: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
15a0: 4c 69 6e 65 28 22 75 6e 6b 6e 6f 77 6e 20 74 65  Line("unknown te
15b0: 73 74 20 5c 22 7b 30 7d 5c 22 22 2c 20 61 72 67  st \"{0}\"", arg
15c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
15d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15e0: 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   1;..           
15f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1600: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
1610: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
1620: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
1630: 20 41 74 74 65 6d 70 74 73 20 74 6f 20 6f 62 74   Attempts to obt
1640: 61 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69  ain the underlyi
1650: 6e 67 20 73 74 6f 72 65 20 63 6f 6e 6e 65 63 74  ng store connect
1660: 69 6f 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 28  ion..      /// (
1670: 61 20 3c 73 65 65 20 63 72 65 66 3d 22 44 62 43  a <see cref="DbC
1680: 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 29 20 66  onnection" />) f
1690: 72 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69 65  rom the specifie
16a0: 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  d..      /// <se
16b0: 65 20 63 72 65 66 3d 22 45 6e 74 69 74 79 43 6f  e cref="EntityCo
16c0: 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 2e 0d 0a 20  nnection" />... 
16d0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
16e0: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ry>..      /// <
16f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 6e 74 69  param name="enti
1700: 74 79 43 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a  tyConnection">..
1710: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1720: 65 65 20 63 72 65 66 3d 22 45 6e 74 69 74 79 43  ee cref="EntityC
1730: 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 74 6f  onnection" /> to
1740: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f   use...      ///
1750: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1760: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1770: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1780: 65 65 20 63 72 65 66 3d 22 44 62 43 6f 6e 6e 65  ee cref="DbConne
1790: 63 74 69 6f 6e 22 20 2f 3e 20 2d 4f 52 2d 20 6e  ction" /> -OR- n
17a0: 75 6c 6c 20 69 66 20 69 74 0d 0a 20 20 20 20 20  ull if it..     
17b0: 20 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20 64   /// cannot be d
17c0: 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20  etermined...    
17d0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
17e0: 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65 20  ..      private 
17f0: 73 74 61 74 69 63 20 44 62 43 6f 6e 6e 65 63 74  static DbConnect
1800: 69 6f 6e 20 47 65 74 53 74 6f 72 65 43 6f 6e 6e  ion GetStoreConn
1810: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
1820: 20 20 20 45 6e 74 69 74 79 43 6f 6e 6e 65 63 74     EntityConnect
1830: 69 6f 6e 20 65 6e 74 69 74 79 43 6f 6e 6e 65 63  ion entityConnec
1840: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
1850: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1860: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1870: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20      // NOTE: No 
1880: 65 6e 74 69 74 79 20 63 6f 6e 6e 65 63 74 69 6f  entity connectio
1890: 6e 2c 20 6e 6f 20 73 74 6f 72 65 20 63 6f 6e 6e  n, no store conn
18a0: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...       
18b0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
18c0: 20 69 66 20 28 65 6e 74 69 74 79 43 6f 6e 6e 65   if (entityConne
18d0: 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ction == null)..
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18f0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
1900: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1910: 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 57        // HACK: W
1920: 65 20 6e 65 65 64 20 74 68 65 20 75 6e 64 65 72  e need the under
1930: 6c 79 69 6e 67 20 73 74 6f 72 65 20 63 6f 6e 6e  lying store conn
1940: 65 63 74 69 6f 6e 20 61 6e 64 0d 0a 20 20 20 20  ection and..    
1950: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1960: 68 65 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f  he legacy versio
1970: 6e 73 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46  ns of the .NET F
1980: 72 61 6d 65 77 6f 72 6b 20 64 6f 0d 0a 20 20 20  ramework do..   
1990: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
19a0: 6e 6f 74 20 65 78 70 6f 73 65 20 69 74 3b 20 74  not expose it; t
19b0: 68 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70  herefore, attemp
19c0: 74 20 74 6f 20 67 72 61 62 20 69 74 0d 0a 20 20  t to grab it..  
19d0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19e0: 20 62 79 20 66 6f 72 63 65 2e 0d 0a 20 20 20 20   by force...    
19f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1a00: 20 20 20 20 46 69 65 6c 64 49 6e 66 6f 20 66 69      FieldInfo fi
1a10: 65 6c 64 49 6e 66 6f 20 3d 20 74 79 70 65 6f 66  eldInfo = typeof
1a20: 28 45 6e 74 69 74 79 43 6f 6e 6e 65 63 74 69 6f  (EntityConnectio
1a30: 6e 29 2e 47 65 74 46 69 65 6c 64 28 0d 0a 20 20  n).GetField(..  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 22 5f 73 74              "_st
1a50: 6f 72 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 2c 20  oreConnection", 
1a60: 42 69 6e 64 69 6e 67 46 6c 61 67 73 2e 49 6e 73  BindingFlags.Ins
1a70: 74 61 6e 63 65 20 7c 0d 0a 20 20 20 20 20 20 20  tance |..       
1a80: 20 20 20 20 20 20 20 42 69 6e 64 69 6e 67 46 6c         BindingFl
1a90: 61 67 73 2e 4e 6f 6e 50 75 62 6c 69 63 29 3b 0d  ags.NonPublic);.
1aa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  ...          //.
1ab0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  .          // NO
1ac0: 54 45 3a 20 49 66 20 74 68 65 20 66 69 65 6c 64  TE: If the field
1ad0: 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 6a   is not found, j
1ae0: 75 73 74 20 72 65 74 75 72 6e 20 6e 75 6c 6c 2e  ust return null.
1af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ..          //..
1b00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 69            if (fi
1b10: 65 6c 64 49 6e 66 6f 20 3d 3d 20 6e 75 6c 6c 29  eldInfo == null)
1b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b30: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
1b40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b50: 20 66 69 65 6c 64 49 6e 66 6f 2e 47 65 74 56 61   fieldInfo.GetVa
1b60: 6c 75 65 28 65 6e 74 69 74 79 43 6f 6e 6e 65 63  lue(entityConnec
1b70: 74 69 6f 6e 29 20 61 73 20 44 62 43 6f 6e 6e 65  tion) as DbConne
1b80: 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d  ction;..      }.
1b90: 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
1ba0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 64     // NOTE: Used
1bb0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 69 78   to test the fix
1bc0: 20 66 6f 72 20 74 69 63 6b 65 74 20 5b 38 62 37   for ticket [8b7
1bd0: 64 31 37 39 63 33 63 5d 2e 0d 0a 20 20 20 20 20  d179c3c]...     
1be0: 20 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61   //..      priva
1bf0: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 53 6b  te static int Sk
1c00: 69 70 54 65 73 74 28 69 6e 74 20 70 61 67 65 53  ipTest(int pageS
1c10: 69 7a 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ize)..      {.. 
1c20: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
1c30: 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74  northwindEFEntit
1c40: 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72  ies db = new nor
1c50: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
1c60: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ())..          {
1c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c80: 62 6f 6f 6c 20 6f 6e 63 65 20 3d 20 66 61 6c 73  bool once = fals
1c90: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ca0: 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 64 62    int count = db
1cb0: 2e 43 75 73 74 6f 6d 65 72 73 2e 43 6f 75 6e 74  .Customers.Count
1cc0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1cd0: 20 20 20 20 20 69 6e 74 20 50 61 67 65 43 6f 75       int PageCou
1ce0: 6e 74 20 3d 20 28 70 61 67 65 53 69 7a 65 20 21  nt = (pageSize !
1cf0: 3d 20 30 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  = 0) ?..        
1d00: 20 20 20 20 20 20 20 20 20 20 28 63 6f 75 6e 74            (count
1d10: 20 2f 20 70 61 67 65 53 69 7a 65 29 20 2b 20 28   / pageSize) + (
1d20: 28 63 6f 75 6e 74 20 25 20 70 61 67 65 53 69 7a  (count % pageSiz
1d30: 65 29 20 3d 3d 20 30 20 3f 20 30 20 3a 20 31 29  e) == 0 ? 0 : 1)
1d40: 20 3a 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   : 1;....       
1d50: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
1d60: 70 61 67 65 49 6e 64 65 78 20 3d 20 30 3b 20 70  pageIndex = 0; p
1d70: 61 67 65 49 6e 64 65 78 20 3c 20 50 61 67 65 43  ageIndex < PageC
1d80: 6f 75 6e 74 3b 20 70 61 67 65 49 6e 64 65 78 2b  ount; pageIndex+
1d90: 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
1da0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1db0: 20 20 20 20 20 20 20 76 61 72 20 71 75 65 72 79         var query
1dc0: 20 3d 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 2e   = db.Customers.
1dd0: 4f 72 64 65 72 42 79 28 70 20 3d 3e 20 70 2e 43  OrderBy(p => p.C
1de0: 69 74 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ity)...         
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 6b 69               Ski
1e00: 70 28 70 61 67 65 53 69 7a 65 20 2a 20 70 61 67  p(pageSize * pag
1e10: 65 49 6e 64 65 78 29 2e 54 61 6b 65 28 70 61 67  eIndex).Take(pag
1e20: 65 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eSize);....     
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
1e40: 65 61 63 68 20 28 43 75 73 74 6f 6d 65 72 73 20  each (Customers 
1e50: 63 75 73 74 6f 6d 65 72 73 20 69 6e 20 71 75 65  customers in que
1e60: 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry)..           
1e70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e90: 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20 20  if (once)..     
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb0: 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
1ec0: 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20  te(' ');....    
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee0: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28    Console.Write(
1ef0: 63 75 73 74 6f 6d 65 72 73 2e 43 75 73 74 6f 6d  customers.Custom
1f00: 65 72 49 44 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  erID);....      
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 6f 6e 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  once = true;..  
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f40: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1f50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
1f60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
1f70: 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d  urn 0;..      }.
1f80: 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
1f90: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 64     // NOTE: Used
1fa0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 69 78   to test the fix
1fb0: 20 66 6f 72 20 74 69 63 6b 65 74 20 5b 35 39 65   for ticket [59e
1fc0: 64 63 31 30 31 38 62 5d 2e 0d 0a 20 20 20 20 20  dc1018b]...     
1fd0: 20 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61   //..      priva
1fe0: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 45 6e  te static int En
1ff0: 64 73 57 69 74 68 54 65 73 74 28 73 74 72 69 6e  dsWithTest(strin
2000: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  g value)..      
2010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  {..          usi
2020: 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46 45  ng (northwindEFE
2030: 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65 77  ntities db = new
2040: 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69   northwindEFEnti
2050: 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20 20  ties())..       
2060: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2070: 20 20 20 20 62 6f 6f 6c 20 6f 6e 63 65 20 3d 20      bool once = 
2080: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2090: 20 20 20 20 20 20 76 61 72 20 71 75 65 72 79 20        var query 
20a0: 3d 20 66 72 6f 6d 20 63 20 69 6e 20 64 62 2e 43  = from c in db.C
20b0: 75 73 74 6f 6d 65 72 73 0d 0a 20 20 20 20 20 20  ustomers..      
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d0: 20 20 20 20 77 68 65 72 65 20 63 2e 43 69 74 79      where c.City
20e0: 2e 45 6e 64 73 57 69 74 68 28 76 61 6c 75 65 29  .EndsWith(value)
20f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2100: 20 20 20 20 20 20 20 20 20 20 20 20 6f 72 64 65              orde
2110: 72 62 79 20 63 2e 43 75 73 74 6f 6d 65 72 49 44  rby c.CustomerID
2120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2130: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 65              sele
2140: 63 74 20 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ct c;....       
2150: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
2160: 43 75 73 74 6f 6d 65 72 73 20 63 75 73 74 6f 6d  Customers custom
2170: 65 72 73 20 69 6e 20 71 75 65 72 79 29 0d 0a 20  ers in query).. 
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a0: 20 20 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20    if (once)..   
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c0: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
21d0: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
21f0: 6f 6c 65 2e 57 72 69 74 65 28 63 75 73 74 6f 6d  ole.Write(custom
2200: 65 72 73 2e 43 75 73 74 6f 6d 65 72 49 44 29 3b  ers.CustomerID);
2210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2220: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 74 72 75        once = tru
2230: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2240: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
2250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
2260: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 7d  turn 0;..      }
2270: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
2280: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65      // NOTE: Use
2290: 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 65 20  d to verify the 
22a0: 62 65 68 61 76 69 6f 72 20 66 72 6f 6d 20 74 69  behavior from ti
22b0: 63 6b 65 74 20 5b 30 30 66 38 36 66 39 37 33 39  cket [00f86f9739
22c0: 5d 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ]...      //..  
22d0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
22e0: 69 63 20 69 6e 74 20 53 74 61 72 74 73 57 69 74  ic int StartsWit
22f0: 68 54 65 73 74 28 73 74 72 69 6e 67 20 76 61 6c  hTest(string val
2300: 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ue)..      {..  
2310: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 6e          using (n
2320: 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69  orthwindEFEntiti
2330: 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74  es db = new nort
2340: 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 28  hwindEFEntities(
2350: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
2360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  .              b
2370: 6f 6f 6c 20 6f 6e 63 65 20 3d 20 66 61 6c 73 65  ool once = false
2380: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2390: 20 76 61 72 20 71 75 65 72 79 20 3d 20 66 72 6f   var query = fro
23a0: 6d 20 63 20 69 6e 20 64 62 2e 43 75 73 74 6f 6d  m c in db.Custom
23b0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
23d0: 68 65 72 65 20 63 2e 43 69 74 79 2e 53 74 61 72  here c.City.Star
23e0: 74 73 57 69 74 68 28 76 61 6c 75 65 29 0d 0a 20  tsWith(value).. 
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2400: 20 20 20 20 20 20 20 20 20 6f 72 64 65 72 62 79           orderby
2410: 20 63 2e 43 75 73 74 6f 6d 65 72 49 44 0d 0a 20   c.CustomerID.. 
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 20 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 20           select 
2440: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  c;....          
2450: 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 75 73      foreach (Cus
2460: 74 6f 6d 65 72 73 20 63 75 73 74 6f 6d 65 72 73  tomers customers
2470: 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20   in query)..    
2480: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24a0: 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20 20 20  f (once)..      
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 27 20  Console.Write(' 
24d0: 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ');....         
24e0: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
24f0: 2e 57 72 69 74 65 28 63 75 73 74 6f 6d 65 72 73  .Write(customers
2500: 2e 43 75 73 74 6f 6d 65 72 49 44 29 3b 0d 0a 0d  .CustomerID);...
2510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2520: 20 20 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b 0d     once = true;.
2530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2540: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
2550: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
2560: 6e 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  n 0;..      }...
2570: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
2580: 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 64 20 74   // NOTE: Used t
2590: 6f 20 74 65 73 74 20 74 68 65 20 66 69 78 20 66  o test the fix f
25a0: 6f 72 20 74 69 63 6b 65 74 20 5b 30 61 33 32 38  or ticket [0a328
25b0: 38 35 31 30 39 5d 2e 0d 0a 20 20 20 20 20 20 2f  85109]...      /
25c0: 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65  /..      private
25d0: 20 73 74 61 74 69 63 20 69 6e 74 20 55 6e 69 6f   static int Unio
25e0: 6e 41 6c 6c 54 65 73 74 28 29 0d 0a 20 20 20 20  nAllTest()..    
25f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75    {..          u
2600: 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45  sing (northwindE
2610: 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e  FEntities db = n
2620: 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e  ew northwindEFEn
2630: 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20  tities())..     
2640: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2650: 20 20 20 20 20 20 62 6f 6f 6c 20 6f 6e 63 65 20        bool once 
2660: 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
2670: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 63 75            var cu
2680: 73 74 6f 6d 65 72 73 31 20 3d 20 64 62 2e 43 75  stomers1 = db.Cu
2690: 73 74 6f 6d 65 72 73 2e 57 68 65 72 65 28 0d 0a  stomers.Where(..
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b0: 20 20 66 20 3d 3e 20 66 2e 4f 72 64 65 72 73 2e    f => f.Orders.
26c0: 41 6e 79 28 29 29 2e 4f 72 64 65 72 42 79 44 65  Any()).OrderByDe
26d0: 73 63 65 6e 64 69 6e 67 28 0d 0a 20 20 20 20 20  scending(..     
26e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26f0: 20 3d 3e 20 66 2e 43 6f 6d 70 61 6e 79 4e 61 6d   => f.CompanyNam
2700: 65 29 2e 53 6b 69 70 28 31 29 2e 54 61 6b 65 28  e).Skip(1).Take(
2710: 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  1);....         
2720: 20 20 20 20 20 76 61 72 20 63 75 73 74 6f 6d 65       var custome
2730: 72 73 32 20 3d 20 64 62 2e 43 75 73 74 6f 6d 65  rs2 = db.Custome
2740: 72 73 2e 57 68 65 72 65 28 0d 0a 20 20 20 20 20  rs.Where(..     
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 20 3d               f =
2760: 3e 20 66 2e 4f 72 64 65 72 73 2e 41 6e 79 28 29  > f.Orders.Any()
2770: 29 2e 4f 72 64 65 72 42 79 28 0d 0a 20 20 20 20  ).OrderBy(..    
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2790: 66 20 3d 3e 20 66 2e 43 6f 6d 70 61 6e 79 4e 61  f => f.CompanyNa
27a0: 6d 65 29 2e 53 6b 69 70 28 31 29 2e 54 61 6b 65  me).Skip(1).Take
27b0: 28 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (1);....        
27c0: 20 20 20 20 20 20 76 61 72 20 63 75 73 74 6f 6d        var custom
27d0: 65 72 73 33 20 3d 20 64 62 2e 43 75 73 74 6f 6d  ers3 = db.Custom
27e0: 65 72 73 2e 57 68 65 72 65 28 0d 0a 20 20 20 20  ers.Where(..    
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 20                f 
2800: 3d 3e 20 66 2e 43 75 73 74 6f 6d 65 72 49 44 2e  => f.CustomerID.
2810: 53 74 61 72 74 73 57 69 74 68 28 22 42 22 29 29  StartsWith("B"))
2820: 2e 4f 72 64 65 72 42 79 28 0d 0a 20 20 20 20 20  .OrderBy(..     
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2840: 20 3d 3e 20 66 2e 43 6f 6d 70 61 6e 79 4e 61 6d   => f.CompanyNam
2850: 65 29 2e 53 6b 69 70 28 31 29 2e 54 61 6b 65 28  e).Skip(1).Take(
2860: 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  1);....         
2870: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 76 61       foreach (va
2880: 72 20 63 75 73 74 6f 6d 65 72 20 69 6e 20 63 75  r customer in cu
2890: 73 74 6f 6d 65 72 73 31 29 0d 0a 20 20 20 20 20  stomers1)..     
28a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28c0: 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20 20 20 20   (once)..       
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
28e0: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27  onsole.Write(' '
28f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2900: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
2910: 57 72 69 74 65 28 63 75 73 74 6f 6d 65 72 2e 43  Write(customer.C
2920: 75 73 74 6f 6d 65 72 49 44 29 3b 0d 0a 20 20 20  ustomerID);..   
2930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
2940: 6e 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  nce = true;..   
2950: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2970: 72 65 61 63 68 20 28 76 61 72 20 63 75 73 74 6f  reach (var custo
2980: 6d 65 72 20 69 6e 20 63 75 73 74 6f 6d 65 72 73  mer in customers
2990: 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2)..            
29a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29b0: 20 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65 29         if (once)
29c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d0: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
29e0: 57 72 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20  Write(' ');.... 
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a00: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 63   Console.Write(c
2a10: 75 73 74 6f 6d 65 72 2e 43 75 73 74 6f 6d 65 72  ustomer.Customer
2a20: 49 44 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ID);..          
2a30: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 74          once = t
2a40: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2a50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a60: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
2a70: 76 61 72 20 63 75 73 74 6f 6d 65 72 20 69 6e 20  var customer in 
2a80: 63 75 73 74 6f 6d 65 72 73 33 29 0d 0a 20 20 20  customers3)..   
2a90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab0: 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20 20  if (once)..     
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad0: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 27   Console.Write('
2ae0: 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ');....        
2af0: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
2b00: 65 2e 57 72 69 74 65 28 63 75 73 74 6f 6d 65 72  e.Write(customer
2b10: 2e 43 75 73 74 6f 6d 65 72 49 44 29 3b 0d 0a 20  .CustomerID);.. 
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20   once = true;.. 
2b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b60: 66 6f 72 65 61 63 68 20 28 76 61 72 20 63 75 73  foreach (var cus
2b70: 74 6f 6d 65 72 20 69 6e 20 63 75 73 74 6f 6d 65  tomer in custome
2b80: 72 73 31 2e 43 6f 6e 63 61 74 28 63 75 73 74 6f  rs1.Concat(custo
2b90: 6d 65 72 73 32 29 29 0d 0a 20 20 20 20 20 20 20  mers2))..       
2ba0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2bc0: 6f 6e 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20  once)..         
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
2be0: 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b  sole.Write(' ');
2bf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c00: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
2c10: 69 74 65 28 63 75 73 74 6f 6d 65 72 2e 43 75 73  ite(customer.Cus
2c20: 74 6f 6d 65 72 49 44 29 3b 0d 0a 20 20 20 20 20  tomerID);..     
2c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63               onc
2c40: 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
2c50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2c70: 61 63 68 20 28 76 61 72 20 63 75 73 74 6f 6d 65  ach (var custome
2c80: 72 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  r in..          
2c90: 20 20 20 20 20 20 20 20 20 20 63 75 73 74 6f 6d            custom
2ca0: 65 72 73 31 2e 43 6f 6e 63 61 74 28 63 75 73 74  ers1.Concat(cust
2cb0: 6f 6d 65 72 73 32 29 2e 43 6f 6e 63 61 74 28 63  omers2).Concat(c
2cc0: 75 73 74 6f 6d 65 72 73 33 29 29 0d 0a 20 20 20  ustomers3))..   
2cd0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf0: 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20 20  if (once)..     
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d10: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 27   Console.Write('
2d20: 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ');....        
2d30: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
2d40: 65 2e 57 72 69 74 65 28 63 75 73 74 6f 6d 65 72  e.Write(customer
2d50: 2e 43 75 73 74 6f 6d 65 72 49 44 29 3b 0d 0a 20  .CustomerID);.. 
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d70: 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20   once = true;.. 
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2da0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2db0: 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  0;..      }.... 
2dc0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f       //..      /
2dd0: 2f 20 4e 4f 54 45 3a 20 55 73 65 64 20 74 6f 20  / NOTE: Used to 
2de0: 74 65 73 74 20 74 68 65 20 66 69 78 20 66 6f 72  test the fix for
2df0: 20 74 69 63 6b 65 74 20 5b 63 63 66 61 36 39 66   ticket [ccfa69f
2e00: 63 33 32 5d 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d  c32]...      //.
2e10: 0a 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73  .      private s
2e20: 74 61 74 69 63 20 69 6e 74 20 45 46 54 72 61 6e  tatic int EFTran
2e30: 73 61 63 74 69 6f 6e 54 65 73 74 28 62 6f 6f 6c  sactionTest(bool
2e40: 20 61 64 64 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   add)..      {..
2e50: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2e60: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2e70: 20 53 6f 6d 65 20 6f 66 20 74 68 65 73 65 20 74   Some of these t
2e80: 65 72 72 69 74 6f 72 69 65 73 20 61 6c 72 65 61  erritories alrea
2e90: 64 79 20 65 78 69 73 74 20 61 6e 64 20 73 68 6f  dy exist and sho
2ea0: 75 6c 64 20 63 61 75 73 65 0d 0a 20 20 20 20 20  uld cause..     
2eb0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
2ec0: 20 65 78 63 65 70 74 69 6f 6e 20 74 6f 20 62 65   exception to be
2ed0: 20 74 68 72 6f 77 6e 20 77 68 65 6e 20 77 65 20   thrown when we 
2ee0: 74 72 79 20 74 6f 20 49 4e 53 45 52 54 20 74 68  try to INSERT th
2ef0: 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  em...          /
2f00: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  /..          lon
2f10: 67 5b 5d 20 74 65 72 72 69 74 6f 72 79 49 64 73  g[] territoryIds
2f20: 20 3d 20 6e 65 77 20 6c 6f 6e 67 5b 5d 20 7b 0d   = new long[] {.
2f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f40: 20 20 31 2c 20 20 20 20 32 2c 20 20 20 20 33 2c    1,    2,    3,
2f50: 20 20 20 20 34 2c 20 20 20 20 35 2c 20 2f 2f 20      4,    5, // 
2f60: 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 0d 0a 20  NOTE: Success.. 
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f80: 36 2c 20 20 20 20 37 2c 20 20 20 20 38 2c 20 20  6,    7,    8,  
2f90: 20 20 39 2c 20 20 20 31 30 2c 20 2f 2f 20 4e 4f    9,   10, // NO
2fa0: 54 45 3a 20 53 75 63 63 65 73 73 0d 0a 20 20 20  TE: Success..   
2fb0: 20 20 20 20 20 20 20 20 20 20 20 31 35 37 36 2c             1576,
2fc0: 20 31 35 37 37 2c 20 31 35 37 38 2c 20 31 35 37   1577, 1578, 157
2fd0: 39 2c 20 31 35 38 30 2c 20 2f 2f 20 4e 4f 54 45  9, 1580, // NOTE
2fe0: 3a 20 53 75 63 63 65 73 73 0d 0a 20 20 20 20 20  : Success..     
2ff0: 20 20 20 20 20 20 20 20 20 31 35 38 31 2c 20 31           1581, 1
3000: 37 33 30 2c 20 31 38 33 33 2c 20 32 31 31 36 2c  730, 1833, 2116,
3010: 20 32 31 33 39 2c 20 2f 2f 20 4e 4f 54 45 3a 20   2139, // NOTE: 
3020: 46 61 69 6c 20 28 31 35 38 31 29 0d 0a 20 20 20  Fail (1581)..   
3030: 20 20 20 20 20 20 20 20 20 20 20 32 31 34 30 2c             2140,
3040: 20 32 31 34 31 20 20 20 20 20 20 20 20 20 20 20   2141           
3050: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
3060: 3a 20 53 6b 69 70 70 65 64 0d 0a 20 20 20 20 20  : Skipped..     
3070: 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20       };....     
3080: 20 20 20 20 20 69 66 20 28 61 64 64 29 0d 0a 20       if (add).. 
3090: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30a0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
30b0: 28 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69  (northwindEFEnti
30c0: 74 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f  ties db = new no
30d0: 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65  rthwindEFEntitie
30e0: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s())..          
30f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3100: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
3110: 54 72 61 6e 73 61 63 74 69 6f 6e 53 63 6f 70 65  TransactionScope
3120: 20 73 63 6f 70 65 20 3d 20 6e 65 77 20 54 72 61   scope = new Tra
3130: 6e 73 61 63 74 69 6f 6e 53 63 6f 70 65 28 29 29  nsactionScope())
3140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3180: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3190: 2a 52 45 51 55 49 52 45 44 2a 20 54 68 69 73 20  *REQUIRED* This 
31a0: 69 73 20 72 65 71 75 69 72 65 64 20 73 6f 20 74  is required so t
31b0: 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hat the..       
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31d0: 2f 20 20 20 20 20 20 20 45 6e 74 69 74 79 20 46  /       Entity F
31e0: 72 61 6d 65 77 6f 72 6b 20 69 73 20 70 72 65 76  ramework is prev
31f0: 65 6e 74 65 64 20 66 72 6f 6d 20 6f 70 65 6e 69  ented from openi
3200: 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
3210: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3220: 20 20 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 6e     multiple conn
3230: 65 63 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 75  ections to the u
3240: 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65  nderlying SQLite
3250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3260: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3270: 20 64 61 74 61 62 61 73 65 20 28 69 2e 65 2e 20   database (i.e. 
3280: 77 68 69 63 68 20 77 6f 75 6c 64 20 72 65 73 75  which would resu
3290: 6c 74 20 69 6e 20 6d 75 6c 74 69 70 6c 65 0d 0a  lt in multiple..
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49        //       I
32c0: 4d 4d 45 44 49 41 54 45 20 74 72 61 6e 73 61 63  MMEDIATE transac
32d0: 74 69 6f 6e 73 2c 20 74 68 65 72 65 62 79 20 66  tions, thereby f
32e0: 61 69 6c 69 6e 67 20 5b 6c 61 74 65 72 0d 0a 20  ailing [later.. 
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3300: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e       //       on
3310: 5d 20 77 69 74 68 20 6c 6f 63 6b 69 6e 67 20 65  ] with locking e
3320: 72 72 6f 72 73 29 2e 0d 0a 20 20 20 20 20 20 20  rrors)...       
3330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3340: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3350: 20 20 20 20 20 20 20 20 20 64 62 2e 43 6f 6e 6e           db.Conn
3360: 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a  ection.Open();..
3370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3380: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
3390: 28 69 6e 74 20 69 64 20 69 6e 20 74 65 72 72 69  (int id in terri
33a0: 74 6f 72 79 49 64 73 29 0d 0a 20 20 20 20 20 20  toryIds)..      
33b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 65 72               Ter
33e0: 72 69 74 6f 72 69 65 73 20 74 65 72 72 69 74 6f  ritories territo
33f0: 72 69 65 73 20 3d 20 6e 65 77 20 54 65 72 72 69  ries = new Terri
3400: 74 6f 72 69 65 73 28 29 3b 0d 0a 0d 0a 20 20 20  tories();....   
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3420: 20 20 20 20 20 20 20 74 65 72 72 69 74 6f 72 69         territori
3430: 65 73 2e 54 65 72 72 69 74 6f 72 79 49 44 20 3d  es.TerritoryID =
3440: 20 69 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   id;..          
3450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3460: 74 65 72 72 69 74 6f 72 69 65 73 2e 54 65 72 72  territories.Terr
3470: 69 74 6f 72 79 44 65 73 63 72 69 70 74 69 6f 6e  itoryDescription
3480: 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
3490: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b0: 20 22 54 65 73 74 20 54 65 72 72 69 74 6f 72 79   "Test Territory
34c0: 20 23 7b 30 7d 22 2c 20 69 64 29 3b 0d 0a 20 20   #{0}", id);..  
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e0: 20 20 20 20 20 20 20 20 74 65 72 72 69 74 6f 72          territor
34f0: 69 65 73 2e 52 65 67 69 6f 6e 73 20 3d 20 64 62  ies.Regions = db
3500: 2e 52 65 67 69 6f 6e 73 2e 46 69 72 73 74 28 29  .Regions.First()
3510: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
3530: 62 2e 41 64 64 4f 62 6a 65 63 74 28 22 54 65 72  b.AddObject("Ter
3540: 72 69 74 6f 72 69 65 73 22 2c 20 74 65 72 72 69  ritories", terri
3550: 74 6f 72 69 65 73 29 3b 0d 0a 20 20 20 20 20 20  tories);..      
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3570: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3580: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 4e 45 54        {..#if NET
35b0: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c  _40 || NET_45 ||
35c0: 20 4e 45 54 5f 34 35 31 0d 0a 20 20 20 20 20 20   NET_451..      
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e 67      db.SaveChang
35f0: 65 73 28 53 61 76 65 4f 70 74 69 6f 6e 73 2e 4e  es(SaveOptions.N
3600: 6f 6e 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  one);..#else..  
3610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3620: 20 20 20 20 20 20 20 20 64 62 2e 53 61 76 65 43          db.SaveC
3630: 68 61 6e 67 65 73 28 66 61 6c 73 65 29 3b 0d 0a  hanges(false);..
3640: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3670: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
3680: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
3690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
36c0: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65  onsole.WriteLine
36d0: 28 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  (e);..          
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3720: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3740: 20 73 63 6f 70 65 2e 43 6f 6d 70 6c 65 74 65 28   scope.Complete(
3750: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
3770: 2e 41 63 63 65 70 74 41 6c 6c 43 68 61 6e 67 65  .AcceptAllChange
3780: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
3790: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
37d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
37e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
3800: 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46 45  ng (northwindEFE
3810: 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65 77  ntities db = new
3820: 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69   northwindEFEnti
3830: 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20 20  ties())..       
3840: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3850: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
3860: 20 6f 6e 63 65 20 3d 20 66 61 6c 73 65 3b 0d 0a   once = false;..
3870: 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45  #if NET_40 || NE
3880: 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 0d  T_45 || NET_451.
3890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38a0: 20 20 20 76 61 72 20 71 75 65 72 79 20 3d 20 66     var query = f
38b0: 72 6f 6d 20 74 20 69 6e 20 64 62 2e 54 65 72 72  rom t in db.Terr
38c0: 69 74 6f 72 69 65 73 0d 0a 20 20 20 20 20 20 20  itories..       
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65               whe
38e0: 72 65 20 74 65 72 72 69 74 6f 72 79 49 64 73 2e  re territoryIds.
38f0: 41 73 51 75 65 72 79 61 62 6c 65 3c 6c 6f 6e 67  AsQueryable<long
3900: 3e 28 29 2e 43 6f 6e 74 61 69 6e 73 3c 6c 6f 6e  >().Contains<lon
3910: 67 3e 28 74 2e 54 65 72 72 69 74 6f 72 79 49 44  g>(t.TerritoryID
3920: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3930: 20 20 20 20 20 20 20 6f 72 64 65 72 62 79 20 74         orderby t
3940: 2e 54 65 72 72 69 74 6f 72 79 49 44 0d 0a 20 20  .TerritoryID..  
3950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3960: 20 20 73 65 6c 65 63 74 20 74 3b 0d 0a 0d 0a 20    select t;.... 
3970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3980: 20 66 6f 72 65 61 63 68 20 28 54 65 72 72 69 74   foreach (Territ
3990: 6f 72 69 65 73 20 74 65 72 72 69 74 6f 72 69 65  ories territorie
39a0: 73 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20  s in query)..   
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
39c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
39d0: 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65          if (once
39e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
3a00: 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b  sole.Write(' ');
3a10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3a20: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
3a30: 65 2e 57 72 69 74 65 28 74 65 72 72 69 74 6f 72  e.Write(territor
3a40: 69 65 73 2e 54 65 72 72 69 74 6f 72 79 49 44 29  ies.TerritoryID)
3a50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3a60: 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20             once 
3a70: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
3a80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
3a90: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3aa0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3ac0: 48 41 43 4b 3a 20 57 65 20 63 61 6e 6e 6f 74 20  HACK: We cannot 
3ad0: 75 73 65 20 74 68 65 20 43 6f 6e 74 61 69 6e 73  use the Contains
3ae0: 20 65 78 74 65 6e 73 69 6f 6e 20 6d 65 74 68 6f   extension metho
3af0: 64 20 77 69 74 68 69 6e 20 61 0d 0a 20 20 20 20  d within a..    
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3b10: 20 20 20 20 20 20 20 4c 49 4e 51 20 71 75 65 72         LINQ quer
3b20: 79 20 77 69 74 68 20 74 68 65 20 2e 4e 45 54 20  y with the .NET 
3b30: 46 72 61 6d 65 77 6f 72 6b 20 33 2e 35 2e 0d 0a  Framework 3.5...
3b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b50: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3b60: 20 20 20 20 20 20 20 20 76 61 72 20 71 75 65 72          var quer
3b70: 79 20 3d 20 66 72 6f 6d 20 74 20 69 6e 20 64 62  y = from t in db
3b80: 2e 54 65 72 72 69 74 6f 72 69 65 73 0d 0a 20 20  .Territories..  
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ba0: 20 20 6f 72 64 65 72 62 79 20 74 2e 54 65 72 72    orderby t.Terr
3bb0: 69 74 6f 72 79 49 44 0d 0a 20 20 20 20 20 20 20  itoryID..       
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c               sel
3bd0: 65 63 74 20 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ect t;....      
3be0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
3bf0: 61 63 68 20 28 54 65 72 72 69 74 6f 72 69 65 73  ach (Territories
3c00: 20 74 65 72 72 69 74 6f 72 69 65 73 20 69 6e 20   territories in 
3c10: 71 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20  query)..        
3c20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c40: 20 20 20 69 66 20 28 41 72 72 61 79 2e 49 6e 64     if (Array.Ind
3c50: 65 78 4f 66 28 74 65 72 72 69 74 6f 72 79 49 64  exOf(territoryId
3c60: 73 2c 20 74 65 72 72 69 74 6f 72 69 65 73 2e 54  s, territories.T
3c70: 65 72 72 69 74 6f 72 79 49 44 29 20 3d 3d 20 2d  erritoryID) == -
3c80: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
3ca0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cc0: 20 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20   if (once)..    
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
3cf0: 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20  ite(' ');....   
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
3d20: 28 74 65 72 72 69 74 6f 72 69 65 73 2e 54 65 72  (territories.Ter
3d30: 72 69 74 6f 72 79 49 44 29 3b 0d 0a 0d 0a 20 20  ritoryID);....  
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 20 20 20 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b      once = true;
3d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d70: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3d90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3da0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3db0: 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  0;..      }.... 
3dc0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f       //..      /
3dd0: 2f 20 4e 4f 54 45 3a 20 55 73 65 64 20 74 6f 20  / NOTE: Used to 
3de0: 74 65 73 74 20 74 68 65 20 55 50 44 41 54 45 20  test the UPDATE 
3df0: 66 69 78 20 28 69 2e 65 2e 20 74 68 65 20 6d 69  fix (i.e. the mi
3e00: 73 73 69 6e 67 20 73 65 6d 69 2d 63 6f 6c 6f 6e  ssing semi-colon
3e10: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
3e20: 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74   in the SQL stat
3e30: 65 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 74 68  ement between th
3e40: 65 20 61 63 74 75 61 6c 20 55 50 44 41 54 45 20  e actual UPDATE 
3e50: 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20  statement..     
3e60: 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
3e70: 65 20 66 6f 6c 6c 6f 77 2d 75 70 20 53 45 4c 45  e follow-up SELE
3e80: 43 54 20 73 74 61 74 65 6d 65 6e 74 29 2e 0d 0a  CT statement)...
3e90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3ea0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
3eb0: 6e 74 20 55 70 64 61 74 65 54 65 73 74 28 29 0d  nt UpdateTest().
3ec0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
3ed0: 20 20 20 20 6c 6f 6e 67 5b 5d 20 6f 72 64 65 72      long[] order
3ee0: 49 64 73 20 3d 20 6e 65 77 20 6c 6f 6e 67 5b 5d  Ids = new long[]
3ef0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3f00: 20 20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    0..          }
3f10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  ;....          u
3f20: 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45  sing (northwindE
3f30: 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e  FEntities db = n
3f40: 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e  ew northwindEFEn
3f50: 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20  tities())..     
3f60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3f70: 20 20 20 20 20 20 69 6e 74 5b 5d 20 63 6f 75 6e        int[] coun
3f80: 74 73 20 3d 20 7b 20 30 2c 20 30 20 7d 3b 0d 0a  ts = { 0, 0 };..
3f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3fa0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3fb0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 52 45 51 55    // NOTE: *REQU
3fc0: 49 52 45 44 2a 20 54 68 69 73 20 69 73 20 72 65  IRED* This is re
3fd0: 71 75 69 72 65 64 20 73 6f 20 74 68 61 74 20 74  quired so that t
3fe0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
3ff0: 20 20 2f 2f 20 20 20 20 20 20 20 45 6e 74 69 74    //       Entit
4000: 79 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 70  y Framework is p
4010: 72 65 76 65 6e 74 65 64 20 66 72 6f 6d 20 6f 70  revented from op
4020: 65 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  ening..         
4030: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 75       //       mu
4040: 6c 74 69 70 6c 65 20 63 6f 6e 6e 65 63 74 69 6f  ltiple connectio
4050: 6e 73 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ns to the underl
4060: 79 69 6e 67 20 53 51 4c 69 74 65 0d 0a 20 20 20  ying SQLite..   
4070: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
4080: 20 20 20 20 64 61 74 61 62 61 73 65 20 28 69 2e      database (i.
4090: 65 2e 20 77 68 69 63 68 20 77 6f 75 6c 64 20 72  e. which would r
40a0: 65 73 75 6c 74 20 69 6e 20 6d 75 6c 74 69 70 6c  esult in multipl
40b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
40c0: 20 2f 2f 20 20 20 20 20 20 20 49 4d 4d 45 44 49   //       IMMEDI
40d0: 41 54 45 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ATE transactions
40e0: 2c 20 74 68 65 72 65 62 79 20 66 61 69 6c 69 6e  , thereby failin
40f0: 67 20 5b 6c 61 74 65 72 0d 0a 20 20 20 20 20 20  g [later..      
4100: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
4110: 20 6f 6e 5d 20 77 69 74 68 20 6c 6f 63 6b 69 6e   on] with lockin
4120: 67 20 65 72 72 6f 72 73 29 2e 0d 0a 20 20 20 20  g errors)...    
4130: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4140: 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 43              db.C
4150: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
4160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4170: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
4180: 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6f  x = 0; index < o
4190: 72 64 65 72 49 64 73 2e 4c 65 6e 67 74 68 3b 20  rderIds.Length; 
41a0: 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
41b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 72 64               Ord
41d0: 65 72 73 20 6e 65 77 4f 72 64 65 72 73 20 3d 20  ers newOrders = 
41e0: 6e 65 77 20 4f 72 64 65 72 73 28 29 3b 0d 0a 0d  new Orders();...
41f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4200: 20 20 20 6e 65 77 4f 72 64 65 72 73 2e 53 68 69     newOrders.Shi
4210: 70 41 64 64 72 65 73 73 20 3d 20 53 74 72 69 6e  pAddress = Strin
4220: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4240: 20 22 54 65 73 74 20 4f 72 64 65 72 20 53 68 69   "Test Order Shi
4250: 70 20 41 64 64 72 65 73 73 2c 20 49 6e 64 65 78  p Address, Index
4260: 20 23 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20   #{0}",..       
4270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4280: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
4290: 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 41              db.A
42a0: 64 64 4f 62 6a 65 63 74 28 22 4f 72 64 65 72 73  ddObject("Orders
42b0: 22 2c 20 6e 65 77 4f 72 64 65 72 73 29 3b 0d 0a  ", newOrders);..
42c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42d0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
42e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4300: 20 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e 67      db.SaveChang
4310: 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  es();..         
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 75               cou
4330: 6e 74 73 5b 30 5d 2b 2b 3b 0d 0a 0d 0a 20 20 20  nts[0]++;....   
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4350: 20 20 20 2f 2f 20 53 74 6f 72 65 47 65 6e 65 72     // StoreGener
4360: 61 74 65 64 50 61 74 74 65 72 6e 3d 22 49 64 65  atedPattern="Ide
4370: 6e 74 69 74 79 22 0d 0a 20 20 20 20 20 20 20 20  ntity"..        
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 72                or
4390: 64 65 72 49 64 73 5b 69 6e 64 65 78 5d 20 3d 20  derIds[index] = 
43a0: 6e 65 77 4f 72 64 65 72 73 2e 4f 72 64 65 72 49  newOrders.OrderI
43b0: 44 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  D;....          
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53              // S
43d0: 74 6f 72 65 47 65 6e 65 72 61 74 65 64 50 61 74  toreGeneratedPat
43e0: 74 65 72 6e 3d 22 4e 6f 6e 65 22 0d 0a 20 20 20  tern="None"..   
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 20 6e 65 77 4f 72 64 65 72 73 2e 53 68 69     newOrders.Shi
4410: 70 41 64 64 72 65 73 73 20 3d 20 53 74 72 69 6e  pAddress = Strin
4420: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4440: 20 20 20 20 20 22 4e 65 77 20 4f 72 64 65 72 20       "New Order 
4450: 53 68 69 70 20 41 64 64 72 65 73 73 20 23 7b 30  Ship Address #{0
4460: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
4480: 72 64 65 72 49 64 73 5b 69 6e 64 65 78 5d 29 3b  rderIds[index]);
4490: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
44a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53 74 6f            // Sto
44b0: 72 65 47 65 6e 65 72 61 74 65 64 50 61 74 74 65  reGeneratedPatte
44c0: 72 6e 3d 22 43 6f 6d 70 75 74 65 64 22 0d 0a 20  rn="Computed".. 
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 20 20 20 20 6e 65 77 4f 72 64 65 72 73 2e 46       newOrders.F
44f0: 72 65 69 67 68 74 20 3d 20 31 3b 0d 0a 0d 0a 20  reight = 1;.... 
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4510: 20 20 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e       db.SaveChan
4520: 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ges();..        
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
4540: 75 6e 74 73 5b 31 5d 2b 2b 3b 0d 0a 20 20 20 20  unts[1]++;..    
4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4570: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
4580: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
4590: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45b0: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
45c0: 4c 69 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20 20  Line(e);..      
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
4600: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4620: 20 20 20 20 20 64 62 2e 41 63 63 65 70 74 41 6c       db.AcceptAl
4630: 6c 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20  lChanges();..   
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4660: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4670: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
4680: 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Line(..         
4690: 20 20 20 20 20 20 20 20 20 22 69 6e 73 65 72 74           "insert
46a0: 65 64 20 7b 30 7d 20 75 70 64 61 74 65 64 20 7b  ed {0} updated {
46b0: 31 7d 22 2c 20 63 6f 75 6e 74 73 5b 30 5d 2c 20  1}", counts[0], 
46c0: 63 6f 75 6e 74 73 5b 31 5d 29 3b 0d 0a 20 20 20  counts[1]);..   
46d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
46e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
46f0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
4700: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
4710: 4f 54 45 3a 20 55 73 65 64 20 74 6f 20 74 65 73  OTE: Used to tes
4720: 74 20 74 68 65 20 42 69 6e 61 72 79 47 55 49 44  t the BinaryGUID
4730: 20 66 69 78 20 28 69 2e 65 2e 20 42 4c 4f 42 20   fix (i.e. BLOB 
4740: 6c 69 74 65 72 61 6c 20 66 6f 72 6d 61 74 74 69  literal formatti
4750: 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  ng..      //    
4760: 20 20 20 6f 66 20 47 55 49 44 20 76 61 6c 75 65     of GUID value
4770: 73 20 77 68 65 6e 20 74 68 65 20 42 69 6e 61 72  s when the Binar
4780: 79 47 55 49 44 20 63 6f 6e 6e 65 63 74 69 6f 6e  yGUID connection
4790: 20 70 72 6f 70 65 72 74 79 20 68 61 73 20 62 65   property has be
47a0: 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  en..      //    
47b0: 20 20 20 65 6e 61 62 6c 65 64 29 2e 0d 0a 20 20     enabled)...  
47c0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 70 72      //..      pr
47d0: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
47e0: 20 42 69 6e 61 72 79 47 75 69 64 54 65 73 74 28   BinaryGuidTest(
47f0: 62 6f 6f 6c 20 62 69 6e 61 72 79 47 75 69 64 29  bool binaryGuid)
4800: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4810: 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74       Environment
4820: 2e 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 56  .SetEnvironmentV
4830: 61 72 69 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  ariable(..      
4840: 20 20 20 20 20 20 20 20 22 41 70 70 65 6e 64 4d          "AppendM
4850: 61 6e 69 66 65 73 74 54 6f 6b 65 6e 5f 53 51 4c  anifestToken_SQL
4860: 69 74 65 50 72 6f 76 69 64 65 72 4d 61 6e 69 66  iteProviderManif
4870: 65 73 74 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  est",..         
4880: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
4890: 61 74 28 22 3b 42 69 6e 61 72 79 47 55 49 44 3d  at(";BinaryGUID=
48a0: 7b 30 7d 3b 22 2c 20 62 69 6e 61 72 79 47 75 69  {0};", binaryGui
48b0: 64 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d));....        
48c0: 20 20 75 73 69 6e 67 20 28 6e 6f 72 74 68 77 69    using (northwi
48d0: 6e 64 45 46 45 6e 74 69 74 69 65 73 20 64 62 20  ndEFEntities db 
48e0: 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69 6e 64 45  = new northwindE
48f0: 46 45 6e 74 69 74 69 65 73 28 29 29 0d 0a 20 20  FEntities())..  
4900: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4910: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4920: 73 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 56 41  sql = "SELECT VA
4930: 4c 55 45 20 47 55 49 44 20 22 20 2b 0d 0a 20 20  LUE GUID " +..  
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4950: 22 27 32 64 33 64 32 64 33 64 2d 32 64 33 64 2d  "'2d3d2d3d-2d3d-
4960: 32 64 33 64 2d 32 64 33 64 2d 32 64 33 64 32 64  2d3d-2d3d-2d3d2d
4970: 33 64 32 64 33 64 27 20 22 20 2b 0d 0a 20 20 20  3d2d3d' " +..   
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
4990: 46 52 4f 4d 20 4f 72 64 65 72 73 20 41 53 20 6f  FROM Orders AS o
49a0: 20 57 48 45 52 45 20 6f 2e 4f 72 64 65 72 49 44   WHERE o.OrderID
49b0: 20 3d 20 31 30 32 34 38 3b 22 3b 0d 0a 0d 0a 20   = 10248;";.... 
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 62 6a               Obj
49d0: 65 63 74 51 75 65 72 79 3c 73 74 72 69 6e 67 3e  ectQuery<string>
49e0: 20 71 75 65 72 79 20 3d 20 64 62 2e 43 72 65 61   query = db.Crea
49f0: 74 65 51 75 65 72 79 3c 73 74 72 69 6e 67 3e 28  teQuery<string>(
4a00: 73 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sql);....       
4a10: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
4a20: 73 74 72 69 6e 67 20 73 20 69 6e 20 71 75 65 72  string s in quer
4a30: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
4a40: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
4a50: 69 74 65 4c 69 6e 65 28 73 29 3b 0d 0a 20 20 20  iteLine(s);..   
4a60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4a70: 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
4a80: 74 2e 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74  t.SetEnvironment
4a90: 56 61 72 69 61 62 6c 65 28 0d 0a 20 20 20 20 20  Variable(..     
4aa0: 20 20 20 20 20 20 20 20 20 22 41 70 70 65 6e 64           "Append
4ab0: 4d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 5f 53 51  ManifestToken_SQ
4ac0: 4c 69 74 65 50 72 6f 76 69 64 65 72 4d 61 6e 69  LiteProviderMani
4ad0: 66 65 73 74 22 2c 0d 0a 20 20 20 20 20 20 20 20  fest",..        
4ae0: 20 20 20 20 20 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a        null);....
4af0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4b00: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
4b10: 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45  #if NET_40 || NE
4b20: 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 0d  T_45 || NET_451.
4b30: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
4b40: 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 64 20 74   // NOTE: Used t
4b50: 6f 20 74 65 73 74 20 74 68 65 20 42 69 6e 61 72  o test the Binar
4b60: 79 47 55 49 44 20 63 6f 6e 6e 65 63 74 69 6f 6e  yGUID connection
4b70: 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79   string property
4b80: 20 77 69 74 68 0d 0a 20 20 20 20 20 20 2f 2f 20   with..      // 
4b90: 20 20 20 20 20 20 74 68 65 20 43 6f 6e 74 61 69        the Contai
4ba0: 6e 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 74  ns() function (t
4bb0: 69 63 6b 65 74 20 5b 61 34 64 39 63 37 65 65 39  icket [a4d9c7ee9
4bc0: 34 5d 29 2e 20 20 57 65 20 63 61 6e 6e 6f 74 0d  4]).  We cannot.
4bd0: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
4be0: 75 73 65 20 74 68 65 20 43 6f 6e 74 61 69 6e 73  use the Contains
4bf0: 20 65 78 74 65 6e 73 69 6f 6e 20 6d 65 74 68 6f   extension metho
4c00: 64 20 77 69 74 68 69 6e 20 61 20 4c 49 4e 51 20  d within a LINQ 
4c10: 71 75 65 72 79 20 77 69 74 68 0d 0a 20 20 20 20  query with..    
4c20: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 2e    //       the .
4c30: 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 33 2e  NET Framework 3.
4c40: 35 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  5...      //..  
4c50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
4c60: 69 63 20 69 6e 74 20 42 69 6e 61 72 79 47 75 69  ic int BinaryGui
4c70: 64 54 65 73 74 32 28 62 6f 6f 6c 20 62 69 6e 61  dTest2(bool bina
4c80: 72 79 47 75 69 64 29 0d 0a 20 20 20 20 20 20 7b  ryGuid)..      {
4c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 45 6e 76 69  ..          Envi
4ca0: 72 6f 6e 6d 65 6e 74 2e 53 65 74 45 6e 76 69 72  ronment.SetEnvir
4cb0: 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 0d  onmentVariable(.
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
4cd0: 41 70 70 65 6e 64 4d 61 6e 69 66 65 73 74 54 6f  AppendManifestTo
4ce0: 6b 65 6e 5f 53 51 4c 69 74 65 50 72 6f 76 69 64  ken_SQLiteProvid
4cf0: 65 72 4d 61 6e 69 66 65 73 74 22 2c 0d 0a 20 20  erManifest",..  
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
4d10: 6e 67 2e 46 6f 72 6d 61 74 28 22 3b 42 69 6e 61  ng.Format(";Bina
4d20: 72 79 47 55 49 44 3d 7b 30 7d 3b 22 2c 20 62 69  ryGUID={0};", bi
4d30: 6e 61 72 79 47 75 69 64 29 29 3b 0d 0a 0d 0a 20  naryGuid));.... 
4d40: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
4d50: 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74  northwindEFEntit
4d60: 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72  ies db = new nor
4d70: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
4d80: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ())..          {
4d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4da0: 47 75 69 64 20 67 75 69 64 20 3d 20 6e 65 77 20  Guid guid = new 
4db0: 47 75 69 64 28 22 32 64 33 64 32 64 33 64 2d 32  Guid("2d3d2d3d-2
4dc0: 64 33 64 2d 32 64 33 64 2d 32 64 33 64 2d 32 64  d3d-2d3d-2d3d-2d
4dd0: 33 64 32 64 33 64 32 64 33 64 22 29 3b 0d 0a 20  3d2d3d2d3d");.. 
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69               Gui
4df0: 64 5b 5d 20 67 75 69 64 73 20 3d 20 6e 65 77 20  d[] guids = new 
4e00: 47 75 69 64 5b 5d 20 7b 20 67 75 69 64 20 7d 3b  Guid[] { guid };
4e10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4e20: 20 20 62 6f 6f 6c 20 6f 6e 63 65 20 3d 20 66 61    bool once = fa
4e30: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
4e40: 20 20 20 20 76 61 72 20 71 75 65 72 79 20 3d 20      var query = 
4e50: 66 72 6f 6d 20 74 20 69 6e 20 64 62 2e 54 65 72  from t in db.Ter
4e60: 72 69 74 6f 72 69 65 73 0d 0a 20 20 20 20 20 20  ritories..      
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e80: 20 20 20 20 77 68 65 72 65 20 67 75 69 64 73 2e      where guids.
4e90: 41 73 51 75 65 72 79 61 62 6c 65 3c 47 75 69 64  AsQueryable<Guid
4ea0: 3e 28 29 2e 43 6f 6e 74 61 69 6e 73 3c 47 75 69  >().Contains<Gui
4eb0: 64 3e 28 67 75 69 64 29 0d 0a 20 20 20 20 20 20  d>(guid)..      
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ed0: 20 20 20 20 6f 72 64 65 72 62 79 20 74 2e 54 65      orderby t.Te
4ee0: 72 72 69 74 6f 72 79 49 44 0d 0a 20 20 20 20 20  rritoryID..     
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f00: 20 20 20 20 20 73 65 6c 65 63 74 20 74 3b 0d 0a       select t;..
4f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f20: 66 6f 72 65 61 63 68 20 28 54 65 72 72 69 74 6f  foreach (Territo
4f30: 72 69 65 73 20 74 20 69 6e 20 71 75 65 72 79 29  ries t in query)
4f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4f60: 20 20 20 20 20 69 66 20 28 6f 6e 63 65 29 0d 0a       if (once)..
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f80: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
4f90: 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20  ite(' ');....   
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
4fb0: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 74 2e 54  onsole.Write(t.T
4fc0: 65 72 72 69 74 6f 72 79 49 44 29 3b 0d 0a 0d 0a  erritoryID);....
4fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fe0: 20 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b 0d 0a    once = true;..
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5000: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
5010: 20 20 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f            Enviro
5020: 6e 6d 65 6e 74 2e 53 65 74 45 6e 76 69 72 6f 6e  nment.SetEnviron
5030: 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 0d 0a 20  mentVariable(.. 
5040: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 70               "Ap
5050: 70 65 6e 64 4d 61 6e 69 66 65 73 74 54 6f 6b 65  pendManifestToke
5060: 6e 5f 53 51 4c 69 74 65 50 72 6f 76 69 64 65 72  n_SQLiteProvider
5070: 4d 61 6e 69 66 65 73 74 22 2c 0d 0a 20 20 20 20  Manifest",..    
5080: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 29 3b            null);
5090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
50a0: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 7d  turn 0;..      }
50b0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
50c0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
50d0: 20 69 6e 74 20 44 61 74 65 54 69 6d 65 54 65 73   int DateTimeTes
50e0: 74 28 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  t()..      {..  
50f0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 6e          using (n
5100: 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69  orthwindEFEntiti
5110: 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74  es db = new nort
5120: 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 28  hwindEFEntities(
5130: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
5140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44  .              D
5150: 61 74 65 54 69 6d 65 20 64 61 74 65 54 69 6d 65  ateTime dateTime
5160: 20 3d 20 6e 65 77 20 44 61 74 65 54 69 6d 65 28   = new DateTime(
5170: 31 39 39 37 2c 20 31 2c 20 31 2c 20 30 2c 20 30  1997, 1, 1, 0, 0
5180: 2c 20 30 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e  , 0, DateTimeKin
5190: 64 2e 4c 6f 63 61 6c 29 3b 0d 0a 20 20 20 20 20  d.Local);..     
51a0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 31 20           int c1 
51b0: 3d 20 64 62 2e 4f 72 64 65 72 73 2e 57 68 65 72  = db.Orders.Wher
51c0: 65 28 69 20 3d 3e 20 69 2e 4f 72 64 65 72 44 61  e(i => i.OrderDa
51d0: 74 65 20 3d 3d 20 6e 65 77 20 44 61 74 65 54 69  te == new DateTi
51e0: 6d 65 28 31 39 39 37 2c 20 31 2c 20 31 2c 20 30  me(1997, 1, 1, 0
51f0: 2c 20 30 2c 20 30 2c 20 44 61 74 65 54 69 6d 65  , 0, 0, DateTime
5200: 4b 69 6e 64 2e 4c 6f 63 61 6c 29 29 2e 43 6f 75  Kind.Local)).Cou
5210: 6e 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  nt();..         
5220: 20 20 20 20 20 69 6e 74 20 63 32 20 3d 20 64 62       int c2 = db
5230: 2e 4f 72 64 65 72 73 2e 57 68 65 72 65 28 69 20  .Orders.Where(i 
5240: 3d 3e 20 69 2e 4f 72 64 65 72 44 61 74 65 20 3d  => i.OrderDate =
5250: 3d 20 64 61 74 65 54 69 6d 65 29 2e 43 6f 75 6e  = dateTime).Coun
5260: 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t();..          
5270: 20 20 20 20 72 65 74 75 72 6e 20 63 31 20 3d 3d      return c1 ==
5280: 20 63 32 20 3f 20 30 20 3a 20 31 3b 0d 0a 20 20   c2 ? 0 : 1;..  
5290: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
52a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 70 72 69 76   }....      priv
52b0: 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
52c0: 44 61 74 65 54 69 6d 65 54 65 73 74 32 28 0d 0a  DateTimeTest2(..
52d0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
52e0: 20 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 0d   dateTimeFormat.
52f0: 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20  .          )..  
5300: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5310: 20 54 72 61 63 65 4c 69 73 74 65 6e 65 72 20 6c   TraceListener l
5320: 69 73 74 65 6e 65 72 20 3d 20 6e 65 77 20 43 6f  istener = new Co
5330: 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e  nsoleTraceListen
5340: 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  er();....       
5350: 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65     Trace.Listene
5360: 72 73 2e 41 64 64 28 6c 69 73 74 65 6e 65 72 29  rs.Add(listener)
5370: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 45 6e 76  ;..          Env
5380: 69 72 6f 6e 6d 65 6e 74 2e 53 65 74 45 6e 76 69  ironment.SetEnvi
5390: 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28  ronmentVariable(
53a0: 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f 67  "SQLite_ForceLog
53b0: 50 72 65 70 61 72 65 22 2c 20 22 31 22 29 3b 0d  Prepare", "1");.
53c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
53d0: 28 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20  (dateTimeFormat 
53e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
53f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5400: 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74       Environment
5410: 2e 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 56  .SetEnvironmentV
5420: 61 72 69 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  ariable(..      
5430: 20 20 20 20 20 20 20 20 20 20 20 20 22 41 70 70              "App
5440: 65 6e 64 4d 61 6e 69 66 65 73 74 54 6f 6b 65 6e  endManifestToken
5450: 5f 53 51 4c 69 74 65 50 72 6f 76 69 64 65 72 4d  _SQLiteProviderM
5460: 61 6e 69 66 65 73 74 22 2c 0d 0a 20 20 20 20 20  anifest",..     
5470: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
5480: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 3b 44 61 74  ing.Format(";Dat
5490: 65 54 69 6d 65 46 6f 72 6d 61 74 3d 7b 30 7d 3b  eTimeFormat={0};
54a0: 22 2c 20 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  ", dateTimeForma
54b0: 74 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t));..          
54c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  }....          u
54d0: 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45  sing (northwindE
54e0: 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e  FEntities db = n
54f0: 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e  ew northwindEFEn
5500: 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20  tities())..     
5510: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5520: 20 20 20 20 20 20 64 62 2e 4f 72 64 65 72 73 2e        db.Orders.
5530: 57 68 65 72 65 28 69 20 3d 3e 20 69 2e 4f 72 64  Where(i => i.Ord
5540: 65 72 44 61 74 65 20 3c 0d 0a 20 20 20 20 20 20  erDate <..      
5550: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
5560: 44 61 74 65 54 69 6d 65 28 31 39 39 37 2c 20 31  DateTime(1997, 1
5570: 2c 20 31 2c 20 30 2c 20 30 2c 20 30 2c 20 44 61  , 1, 0, 0, 0, Da
5580: 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c  teTimeKind.Local
5590: 29 29 2e 43 6f 75 6e 74 28 29 3b 0d 0a 20 20 20  )).Count();..   
55a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
55b0: 20 20 20 20 20 20 69 66 20 28 64 61 74 65 54 69        if (dateTi
55c0: 6d 65 46 6f 72 6d 61 74 20 21 3d 20 6e 75 6c 6c  meFormat != null
55d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e                En
55f0: 76 69 72 6f 6e 6d 65 6e 74 2e 53 65 74 45 6e 76  vironment.SetEnv
5600: 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65  ironmentVariable
5610: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5620: 20 20 20 20 20 22 41 70 70 65 6e 64 4d 61 6e 69       "AppendMani
5630: 66 65 73 74 54 6f 6b 65 6e 5f 53 51 4c 69 74 65  festToken_SQLite
5640: 50 72 6f 76 69 64 65 72 4d 61 6e 69 66 65 73 74  ProviderManifest
5650: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
5660: 20 20 20 20 20 20 6e 75 6c 6c 29 3b 0d 0a 20 20        null);..  
5670: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5680: 20 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65         Environme
5690: 6e 74 2e 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e  nt.SetEnvironmen
56a0: 74 56 61 72 69 61 62 6c 65 28 22 53 51 4c 69 74  tVariable("SQLit
56b0: 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72  e_ForceLogPrepar
56c0: 65 22 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  e", null);..    
56d0: 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74        Trace.List
56e0: 65 6e 65 72 73 2e 52 65 6d 6f 76 65 28 6c 69 73  eners.Remove(lis
56f0: 74 65 6e 65 72 29 3b 0d 0a 20 20 20 20 20 20 7d  tener);..      }
5700: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
5710: 73 74 61 74 69 63 20 69 6e 74 20 4f 6c 64 54 65  static int OldTe
5720: 73 74 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sts()..    {..  
5730: 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72 74 68      using (north
5740: 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 20 64  windEFEntities d
5750: 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69 6e  b = new northwin
5760: 64 45 46 45 6e 74 69 74 69 65 73 28 29 29 0d 0a  dEFEntities())..
5770: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5780: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74   {..          st
5790: 72 69 6e 67 20 65 6e 74 69 74 79 53 51 4c 20 3d  ring entitySQL =
57a0: 20 22 53 45 4c 45 43 54 20 56 41 4c 55 45 20 6f   "SELECT VALUE o
57b0: 20 46 52 4f 4d 20 4f 72 64 65 72 73 20 41 53 20   FROM Orders AS 
57c0: 6f 20 57 48 45 52 45 20 53 51 4c 69 74 65 2e 44  o WHERE SQLite.D
57d0: 61 74 65 50 61 72 74 28 27 79 79 79 79 27 2c 20  atePart('yyyy', 
57e0: 6f 2e 4f 72 64 65 72 44 61 74 65 29 20 3d 20 31  o.OrderDate) = 1
57f0: 39 39 37 20 4f 52 44 45 52 20 42 59 20 6f 2e 4f  997 ORDER BY o.O
5800: 72 64 65 72 49 44 3b 22 3b 0d 0a 20 20 20 20 20  rderID;";..     
5810: 20 20 20 20 20 4f 62 6a 65 63 74 51 75 65 72 79       ObjectQuery
5820: 3c 4f 72 64 65 72 73 3e 20 71 75 65 72 79 20 3d  <Orders> query =
5830: 20 64 62 2e 43 72 65 61 74 65 51 75 65 72 79 3c   db.CreateQuery<
5840: 4f 72 64 65 72 73 3e 28 65 6e 74 69 74 79 53 51  Orders>(entitySQ
5850: 4c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  L);....         
5860: 20 66 6f 72 65 61 63 68 20 28 4f 72 64 65 72 73   foreach (Orders
5870: 20 6f 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20   o in query)..  
5880: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5890: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
58a0: 72 69 74 65 4c 69 6e 65 28 6f 2e 53 68 69 70 50  riteLine(o.ShipP
58b0: 6f 73 74 61 6c 43 6f 64 65 29 3b 0d 0a 20 20 20  ostalCode);..   
58c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
58d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 7b    }....        {
58e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 76 61 72 20  ..          var 
58f0: 71 75 65 72 79 20 3d 20 66 72 6f 6d 20 63 20 69  query = from c i
5900: 6e 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 0d 0a  n db.Customers..
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5920: 20 20 20 20 20 20 77 68 65 72 65 20 63 2e 43 69        where c.Ci
5930: 74 79 20 3d 3d 20 22 4c 6f 6e 64 6f 6e 22 0d 0a  ty == "London"..
5940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5950: 20 20 20 20 20 20 6f 72 64 65 72 62 79 20 63 2e        orderby c.
5960: 43 6f 6d 70 61 6e 79 4e 61 6d 65 0d 0a 20 20 20  CompanyName..   
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5980: 20 20 20 73 65 6c 65 63 74 20 63 3b 0d 0a 0d 0a     select c;....
5990: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 63            int cc
59a0: 20 3d 20 71 75 65 72 79 2e 43 6f 75 6e 74 28 29   = query.Count()
59b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  ;....          f
59c0: 6f 72 65 61 63 68 20 28 43 75 73 74 6f 6d 65 72  oreach (Customer
59d0: 73 20 63 20 69 6e 20 71 75 65 72 79 29 0d 0a 20  s c in query).. 
59e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
59f0: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
5a00: 57 72 69 74 65 4c 69 6e 65 28 63 2e 43 6f 6d 70  WriteLine(c.Comp
5a10: 61 6e 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  anyName);..     
5a20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5a30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  }....        {..
5a40: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5a50: 20 73 63 69 74 79 20 3d 20 22 4c 6f 6e 64 6f 6e   scity = "London
5a60: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 43 75  ";..          Cu
5a70: 73 74 6f 6d 65 72 73 20 63 20 3d 20 64 62 2e 43  stomers c = db.C
5a80: 75 73 74 6f 6d 65 72 73 2e 46 69 72 73 74 4f 72  ustomers.FirstOr
5a90: 44 65 66 61 75 6c 74 28 63 64 20 3d 3e 20 63 64  Default(cd => cd
5aa0: 2e 43 69 74 79 20 3d 3d 20 73 63 69 74 79 29 3b  .City == scity);
5ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73  ..          Cons
5ac0: 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 63 2e  ole.WriteLine(c.
5ad0: 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 3b 0d 0a 20  CompanyName);.. 
5ae0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5af0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5b00: 20 44 61 74 65 54 69 6d 65 20 64 74 20 3d 20 6e   DateTime dt = n
5b10: 65 77 20 44 61 74 65 54 69 6d 65 28 31 39 39 37  ew DateTime(1997
5b20: 2c 20 31 2c 20 31 29 3b 0d 0a 20 20 20 20 20 20  , 1, 1);..      
5b30: 20 20 20 20 76 61 72 20 71 75 65 72 79 20 3d 20      var query = 
5b40: 66 72 6f 6d 20 6f 72 64 65 72 20 69 6e 20 64 62  from order in db
5b50: 2e 4f 72 64 65 72 73 0d 0a 20 20 20 20 20 20 20  .Orders..       
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
5b70: 68 65 72 65 20 6f 72 64 65 72 2e 4f 72 64 65 72  here order.Order
5b80: 44 61 74 65 20 3c 20 64 74 0d 0a 20 20 20 20 20  Date < dt..     
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ba0: 20 6f 72 64 65 72 62 79 20 6f 72 64 65 72 2e 4f   orderby order.O
5bb0: 72 64 65 72 49 44 0d 0a 20 20 20 20 20 20 20 20  rderID..        
5bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
5bd0: 6c 65 63 74 20 6f 72 64 65 72 3b 0d 0a 0d 0a 20  lect order;.... 
5be0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
5bf0: 20 28 4f 72 64 65 72 73 20 6f 20 69 6e 20 71 75   (Orders o in qu
5c00: 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ery)..          
5c10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  {..            C
5c20: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65  onsole.WriteLine
5c30: 28 6f 2e 4f 72 64 65 72 44 61 74 65 2e 54 6f 53  (o.OrderDate.ToS
5c40: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
5c50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5c60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  }....        {..
5c70: 20 20 20 20 20 20 20 20 20 20 43 61 74 65 67 6f            Catego
5c80: 72 69 65 73 20 63 20 3d 20 6e 65 77 20 43 61 74  ries c = new Cat
5c90: 65 67 6f 72 69 65 73 28 29 3b 0d 0a 20 20 20 20  egories();..    
5ca0: 20 20 20 20 20 20 63 2e 43 61 74 65 67 6f 72 79        c.Category
5cb0: 4e 61 6d 65 20 3d 20 22 54 65 73 74 20 43 61 74  Name = "Test Cat
5cc0: 65 67 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  egory";..       
5cd0: 20 20 20 63 2e 44 65 73 63 72 69 70 74 69 6f 6e     c.Description
5ce0: 20 3d 20 22 4d 79 20 44 65 73 63 72 69 70 74 69   = "My Descripti
5cf0: 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
5d00: 64 62 2e 41 64 64 54 6f 43 61 74 65 67 6f 72 69  db.AddToCategori
5d10: 65 73 28 63 29 3b 0d 0a 20 20 20 20 20 20 20 20  es(c);..        
5d20: 20 20 64 62 2e 53 61 76 65 43 68 61 6e 67 65 73    db.SaveChanges
5d30: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
5d40: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
5d50: 6e 65 28 63 2e 43 61 74 65 67 6f 72 79 49 44 29  ne(c.CategoryID)
5d60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  ;....          c
5d70: 2e 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22  .Description = "
5d80: 4d 79 20 6d 6f 64 69 66 69 65 64 20 64 65 73 63  My modified desc
5d90: 72 69 70 74 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  ription";..     
5da0: 20 20 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e       db.SaveChan
5db0: 67 65 73 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ges();....      
5dc0: 20 20 20 20 64 62 2e 44 65 6c 65 74 65 4f 62 6a      db.DeleteObj
5dd0: 65 63 74 28 63 29 3b 0d 0a 20 20 20 20 20 20 20  ect(c);..       
5de0: 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e 67 65     db.SaveChange
5df0: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s();..        }.
5e00: 0a 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  ...        {..  
5e10: 20 20 20 20 20 20 20 20 43 75 73 74 6f 6d 65 72          Customer
5e20: 73 20 63 75 73 74 20 3d 20 6e 65 77 20 43 75 73  s cust = new Cus
5e30: 74 6f 6d 65 72 73 28 29 3b 0d 0a 20 20 20 20 20  tomers();..     
5e40: 20 20 20 20 20 63 75 73 74 2e 43 75 73 74 6f 6d       cust.Custom
5e50: 65 72 49 44 20 3d 20 22 4d 54 4d 54 4d 22 3b 0d  erID = "MTMTM";.
5e60: 0a 20 20 20 20 20 20 20 20 20 20 63 75 73 74 2e  .          cust.
5e70: 43 6f 6e 74 61 63 74 4e 61 6d 65 20 3d 20 22 4d  ContactName = "M
5e80: 79 20 4e 61 6d 65 22 3b 0d 0a 20 20 20 20 20 20  y Name";..      
5e90: 20 20 20 20 63 75 73 74 2e 43 6f 6d 70 61 6e 79      cust.Company
5ea0: 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 43  Name = "SQLite C
5eb0: 6f 6d 70 61 6e 79 22 3b 0d 0a 20 20 20 20 20 20  ompany";..      
5ec0: 20 20 20 20 63 75 73 74 2e 43 6f 75 6e 74 72 79      cust.Country
5ed0: 20 3d 20 22 4e 65 74 68 65 72 6c 61 6e 64 73 22   = "Netherlands"
5ee0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75 73  ;..          cus
5ef0: 74 2e 43 69 74 79 20 3d 20 22 41 6d 73 74 65 72  t.City = "Amster
5f00: 64 61 6d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  dam";..         
5f10: 20 63 75 73 74 2e 50 68 6f 6e 65 20 3d 20 22 30   cust.Phone = "0
5f20: 31 32 33 34 35 36 37 37 22 3b 0d 0a 20 20 20 20  12345677";..    
5f30: 20 20 20 20 20 20 64 62 2e 41 64 64 54 6f 43 75        db.AddToCu
5f40: 73 74 6f 6d 65 72 73 28 63 75 73 74 29 3b 0d 0a  stomers(cust);..
5f50: 20 20 20 20 20 20 20 20 20 20 64 62 2e 53 61 76            db.Sav
5f60: 65 43 68 61 6e 67 65 73 28 29 3b 0d 0a 0d 0a 20  eChanges();.... 
5f70: 20 20 20 20 20 20 20 20 20 64 62 2e 44 65 6c 65           db.Dele
5f80: 74 65 4f 62 6a 65 63 74 28 63 75 73 74 29 3b 0d  teObject(cust);.
5f90: 0a 20 20 20 20 20 20 20 20 20 20 64 62 2e 53 61  .          db.Sa
5fa0: 76 65 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20  veChanges();..  
5fb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5fc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5fd0: 76 61 72 20 71 75 65 72 79 20 3d 20 64 62 2e 43  var query = db.C
5fe0: 75 73 74 6f 6d 65 72 73 2e 57 68 65 72 65 28 63  ustomers.Where(c
5ff0: 75 73 74 20 3d 3e 20 63 75 73 74 2e 43 6f 75 6e  ust => cust.Coun
6000: 74 72 79 20 3d 3d 20 22 44 65 6e 6d 61 72 6b 22  try == "Denmark"
6010: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 53 65               .Se
6030: 6c 65 63 74 4d 61 6e 79 28 63 75 73 74 20 3d 3e  lectMany(cust =>
6040: 20 63 75 73 74 2e 4f 72 64 65 72 73 2e 57 68 65   cust.Orders.Whe
6050: 72 65 28 6f 20 3d 3e 20 6f 2e 46 72 65 69 67 68  re(o => o.Freigh
6060: 74 20 3e 20 35 29 29 0d 0a 20 20 20 20 20 20 20  t > 5))..       
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6080: 20 20 20 2e 4f 72 64 65 72 42 79 28 6f 20 3d 3e     .OrderBy(o =>
6090: 20 6f 2e 43 75 73 74 6f 6d 65 72 73 2e 43 75 73   o.Customers.Cus
60a0: 74 6f 6d 65 72 49 44 29 3b 0d 0a 0d 0a 20 20 20  tomerID);....   
60b0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
60c0: 4f 72 64 65 72 73 20 63 20 69 6e 20 71 75 65 72  Orders c in quer
60d0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  y)..          {.
60e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e  .            Con
60f0: 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 63  sole.WriteLine(c
6100: 2e 46 72 65 69 67 68 74 29 3b 0d 0a 20 20 20 20  .Freight);..    
6110: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6120: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 7b 0d   }....        {.
6130: 0a 20 20 20 20 20 20 20 20 20 20 76 61 72 20 71  .          var q
6140: 75 65 72 79 20 3d 20 66 72 6f 6d 20 63 20 69 6e  uery = from c in
6150: 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 0d 0a 20   db.Customers.. 
6160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6170: 20 20 20 20 20 77 68 65 72 65 20 63 2e 4f 72 64       where c.Ord
6180: 65 72 73 2e 41 6e 79 28 6f 20 3d 3e 20 6f 2e 4f  ers.Any(o => o.O
6190: 72 64 65 72 44 61 74 65 2e 48 61 73 56 61 6c 75  rderDate.HasValu
61a0: 65 20 3d 3d 20 74 72 75 65 20 26 26 20 6f 2e 4f  e == true && o.O
61b0: 72 64 65 72 44 61 74 65 2e 56 61 6c 75 65 2e 59  rderDate.Value.Y
61c0: 65 61 72 20 3d 3d 20 31 39 39 37 29 0d 0a 20 20  ear == 1997)..  
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61e0: 20 20 20 20 6f 72 64 65 72 62 79 20 63 2e 43 75      orderby c.Cu
61f0: 73 74 6f 6d 65 72 49 44 0d 0a 20 20 20 20 20 20  stomerID..      
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6210: 73 65 6c 65 63 74 20 63 3b 0d 0a 0d 0a 20 20 20  select c;....   
6220: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
6230: 43 75 73 74 6f 6d 65 72 73 20 63 20 69 6e 20 71  Customers c in q
6240: 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20  uery)..         
6250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6260: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e  Console.WriteLin
6270: 65 28 63 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 29  e(c.CompanyName)
6280: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
6290: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
62a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
62b0: 20 20 73 74 72 69 6e 67 20 65 6e 74 69 74 79 53    string entityS
62c0: 51 4c 20 3d 20 22 53 45 4c 45 43 54 20 56 41 4c  QL = "SELECT VAL
62d0: 55 45 20 6f 20 46 52 4f 4d 20 4f 72 64 65 72 73  UE o FROM Orders
62e0: 20 41 53 20 6f 20 57 48 45 52 45 20 6f 2e 43 75   AS o WHERE o.Cu
62f0: 73 74 6f 6d 65 72 73 2e 43 6f 75 6e 74 72 79 20  stomers.Country 
6300: 3c 3e 20 27 55 4b 27 20 41 4e 44 20 6f 2e 43 75  <> 'UK' AND o.Cu
6310: 73 74 6f 6d 65 72 73 2e 43 6f 75 6e 74 72 79 20  stomers.Country 
6320: 3c 3e 20 27 4d 65 78 69 63 6f 27 20 41 4e 44 20  <> 'Mexico' AND 
6330: 59 65 61 72 28 6f 2e 4f 72 64 65 72 44 61 74 65  Year(o.OrderDate
6340: 29 20 3d 20 31 39 39 37 20 4f 52 44 45 52 20 42  ) = 1997 ORDER B
6350: 59 20 6f 2e 4f 72 64 65 72 49 44 3b 22 3b 0d 0a  Y o.OrderID;";..
6360: 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74            Object
6370: 51 75 65 72 79 3c 4f 72 64 65 72 73 3e 20 71 75  Query<Orders> qu
6380: 65 72 79 20 3d 20 64 62 2e 43 72 65 61 74 65 51  ery = db.CreateQ
6390: 75 65 72 79 3c 4f 72 64 65 72 73 3e 28 65 6e 74  uery<Orders>(ent
63a0: 69 74 79 53 51 4c 29 3b 0d 0a 0d 0a 20 20 20 20  itySQL);....    
63b0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4f        foreach (O
63c0: 72 64 65 72 73 20 6f 20 69 6e 20 71 75 65 72 79  rders o in query
63d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
63f0: 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 6f 2e  ole.WriteLine(o.
6400: 53 68 69 70 50 6f 73 74 61 6c 43 6f 64 65 29 3b  ShipPostalCode);
6410: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
6420: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6430: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6440: 20 73 74 72 69 6e 67 20 65 6e 74 69 74 79 53 51   string entitySQ
6450: 4c 20 3d 20 22 53 45 4c 45 43 54 20 56 41 4c 55  L = "SELECT VALU
6460: 45 20 6f 20 46 52 4f 4d 20 4f 72 64 65 72 73 20  E o FROM Orders 
6470: 41 53 20 6f 20 57 48 45 52 45 20 4e 65 77 47 75  AS o WHERE NewGu
6480: 69 64 28 29 20 3c 3e 20 4e 65 77 47 75 69 64 28  id() <> NewGuid(
6490: 29 20 4f 52 44 45 52 20 42 59 20 6f 2e 4f 72 64  ) ORDER BY o.Ord
64a0: 65 72 49 44 3b 22 3b 0d 0a 20 20 20 20 20 20 20  erID;";..       
64b0: 20 20 20 4f 62 6a 65 63 74 51 75 65 72 79 3c 4f     ObjectQuery<O
64c0: 72 64 65 72 73 3e 20 71 75 65 72 79 20 3d 20 64  rders> query = d
64d0: 62 2e 43 72 65 61 74 65 51 75 65 72 79 3c 4f 72  b.CreateQuery<Or
64e0: 64 65 72 73 3e 28 65 6e 74 69 74 79 53 51 4c 29  ders>(entitySQL)
64f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  ;....          f
6500: 6f 72 65 61 63 68 20 28 4f 72 64 65 72 73 20 6f  oreach (Orders o
6510: 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20   in query)..    
6520: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6530: 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
6540: 74 65 4c 69 6e 65 28 6f 2e 53 68 69 70 50 6f 73  teLine(o.ShipPos
6550: 74 61 6c 43 6f 64 65 29 3b 0d 0a 20 20 20 20 20  talCode);..     
6560: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6570: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  }....        // 
6580: 54 68 69 73 20 71 75 65 72 79 20 72 65 71 75 69  This query requi
6590: 72 65 73 20 53 51 4c 69 74 65 20 33 2e 36 2e 32  res SQLite 3.6.2
65a0: 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 63 6f 72   to function cor
65b0: 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20  rectly..        
65c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 76 61 72  {..          var
65d0: 20 71 75 65 72 79 20 3d 20 66 72 6f 6d 20 70 20   query = from p 
65e0: 69 6e 20 64 62 2e 50 72 6f 64 75 63 74 73 0d 0a  in db.Products..
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6600: 20 20 20 20 20 20 77 68 65 72 65 20 70 2e 4f 72        where p.Or
6610: 64 65 72 44 65 74 61 69 6c 73 2e 43 6f 75 6e 74  derDetails.Count
6620: 28 6f 64 20 3d 3e 20 6f 64 2e 4f 72 64 65 72 73  (od => od.Orders
6630: 2e 43 75 73 74 6f 6d 65 72 73 2e 43 6f 75 6e 74  .Customers.Count
6640: 72 79 20 3d 3d 20 70 2e 53 75 70 70 6c 69 65 72  ry == p.Supplier
6650: 73 2e 43 6f 75 6e 74 72 79 29 20 3e 20 32 0d 0a  s.Country) > 2..
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6670: 20 20 20 20 20 20 6f 72 64 65 72 62 79 20 70 2e        orderby p.
6680: 50 72 6f 64 75 63 74 49 44 0d 0a 20 20 20 20 20  ProductID..     
6690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66a0: 20 73 65 6c 65 63 74 20 70 3b 0d 0a 0d 0a 20 20   select p;....  
66b0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
66c0: 28 50 72 6f 64 75 63 74 73 20 70 20 69 6e 20 71  (Products p in q
66d0: 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20  uery)..         
66e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
66f0: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e  Console.WriteLin
6700: 65 28 70 2e 50 72 6f 64 75 63 74 4e 61 6d 65 29  e(p.ProductName)
6710: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
6720: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6730: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a   }....      //..
6740: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 28        // NOTE: (
6750: 4a 4a 4d 29 20 52 65 6d 6f 76 65 64 20 6f 6e 20  JJM) Removed on 
6760: 32 30 31 31 2f 30 37 2f 30 36 2c 20 6d 61 6b 65  2011/07/06, make
6770: 73 20 69 74 20 68 61 72 64 65 72 20 74 6f 20 72  s it harder to r
6780: 75 6e 20 74 68 69 73 20 45 58 45 20 76 69 61 0d  un this EXE via.
6790: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
67a0: 74 68 65 20 6e 65 77 20 75 6e 69 74 20 74 65 73  the new unit tes
67b0: 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20  t suite...      
67c0: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 43 6f 6e  //..      // Con
67d0: 73 6f 6c 65 2e 52 65 61 64 4b 65 79 28 29 3b 0d  sole.ReadKey();.
67e0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
67f0: 30 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  0;..    }..  }..
6800: 7d 0d 0a                                         }..