System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 3f6e835b38cecd397a2a8ab1d4a84bc7f43b47cc:


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 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
0150: 6e 65 72 69 63 3b 0d 0a 75 73 69 6e 67 20 53 79  neric;..using Sy
0160: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 75 73 69 6e  stem.Data;..usin
0170: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 43 6f  g System.Data.Co
0180: 6d 6d 6f 6e 3b 0d 0a 75 73 69 6e 67 20 53 79 73  mmon;..using Sys
0190: 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 3b  tem.Diagnostics;
01a0: 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 4c  ..using System.L
01b0: 69 6e 71 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74  inq;..using Syst
01c0: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a  em.Reflection;..
01d0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 72 61  using System.Tra
01e0: 6e 73 61 63 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69  nsactions;....#i
01f0: 66 20 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41  f USE_ENTITY_FRA
0200: 4d 45 57 4f 52 4b 5f 36 0d 0a 75 73 69 6e 67 20  MEWORK_6..using 
0210: 53 79 73 74 65 6d 2e 44 61 74 61 2e 45 6e 74 69  System.Data.Enti
0220: 74 79 2e 43 6f 72 65 3b 0d 0a 75 73 69 6e 67 20  ty.Core;..using 
0230: 53 79 73 74 65 6d 2e 44 61 74 61 2e 45 6e 74 69  System.Data.Enti
0240: 74 79 2e 43 6f 72 65 2e 45 6e 74 69 74 79 43 6c  ty.Core.EntityCl
0250: 69 65 6e 74 3b 0d 0a 75 73 69 6e 67 20 53 79 73  ient;..using Sys
0260: 74 65 6d 2e 44 61 74 61 2e 45 6e 74 69 74 79 2e  tem.Data.Entity.
0270: 43 6f 72 65 2e 4f 62 6a 65 63 74 73 3b 0d 0a 23  Core.Objects;..#
0280: 65 6c 73 65 0d 0a 75 73 69 6e 67 20 53 79 73 74  else..using Syst
0290: 65 6d 2e 44 61 74 61 2e 45 6e 74 69 74 79 43 6c  em.Data.EntityCl
02a0: 69 65 6e 74 3b 0d 0a 75 73 69 6e 67 20 53 79 73  ient;..using Sys
02b0: 74 65 6d 2e 44 61 74 61 2e 4f 62 6a 65 63 74 73  tem.Data.Objects
02c0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 6e 61 6d  ;..#endif....nam
02d0: 65 73 70 61 63 65 20 74 65 73 74 6c 69 6e 71 0d  espace testlinq.
02e0: 0a 7b 0d 0a 20 20 63 6c 61 73 73 20 50 72 6f 67  .{..  class Prog
02f0: 72 61 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20  ram..  {..      
0300: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
0310: 6e 74 20 4d 61 69 6e 28 73 74 72 69 6e 67 5b 5d  nt Main(string[]
0320: 20 61 72 67 73 29 0d 0a 20 20 20 20 20 20 7b 0d   args)..      {.
0330: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 45  .          if (E
0340: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e  nvironment.GetEn
0350: 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c  vironmentVariabl
0360: 65 28 22 42 52 45 41 4b 22 29 20 21 3d 20 6e 75  e("BREAK") != nu
0370: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
0380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0390: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e  Console.WriteLin
03a0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
03b0: 20 20 20 20 20 20 22 41 74 74 61 63 68 20 61 20        "Attach a 
03c0: 64 65 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63  debugger to proc
03d0: 65 73 73 20 7b 30 7d 20 61 6e 64 20 70 72 65 73  ess {0} and pres
03e0: 73 20 61 6e 79 20 6b 65 79 20 74 6f 20 63 6f 6e  s any key to con
03f0: 74 69 6e 75 65 2e 22 2c 0d 0a 20 20 20 20 20 20  tinue.",..      
0400: 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63              Proc
0410: 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72  ess.GetCurrentPr
0420: 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d 0a  ocess().Id);....
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
0440: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
0450: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0460: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52 65        Console.Re
0470: 61 64 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a 20  adKey(true); /* 
0480: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
0490: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
04a0: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
04b0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
04c0: 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f  Exception) // Co
04d0: 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20  nsole.ReadKey.. 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
0510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0520: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
0530: 20 20 20 44 65 62 75 67 67 65 72 2e 42 72 65 61     Debugger.Brea
0540: 6b 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k();..          
0550: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  }....          s
0560: 74 72 69 6e 67 20 61 72 67 20 3d 20 6e 75 6c 6c  tring arg = null
0570: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
0580: 66 20 28 28 61 72 67 73 20 21 3d 20 6e 75 6c 6c  f ((args != null
0590: 29 20 26 26 20 28 61 72 67 73 2e 4c 65 6e 67 74  ) && (args.Lengt
05a0: 68 20 3e 20 30 29 29 0d 0a 20 20 20 20 20 20 20  h > 0))..       
05b0: 20 20 20 20 20 20 20 61 72 67 20 3d 20 61 72 67         arg = arg
05c0: 73 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  s[0];....       
05d0: 20 20 20 69 66 20 28 61 72 67 20 3d 3d 20 6e 75     if (arg == nu
05e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
05f0: 20 20 20 61 72 67 20 3d 20 53 74 72 69 6e 67 2e     arg = String.
0600: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
0610: 20 20 20 20 61 72 67 20 3d 20 61 72 67 2e 54 72      arg = arg.Tr
0620: 69 6d 28 29 2e 54 72 69 6d 53 74 61 72 74 28 27  im().TrimStart('
0630: 2d 27 2c 20 27 2f 27 29 2e 54 6f 4c 6f 77 65 72  -', '/').ToLower
0640: 49 6e 76 61 72 69 61 6e 74 28 29 3b 0d 0a 0d 0a  Invariant();....
0650: 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68            switch
0660: 20 28 61 72 67 29 0d 0a 20 20 20 20 20 20 20 20   (arg)..        
0670: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0680: 20 20 20 63 61 73 65 20 22 22 3a 20 2f 2f 20 53     case "": // S
0690: 74 72 69 6e 67 2e 45 6d 70 74 79 0d 0a 20 20 20  tring.Empty..   
06a0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
06b0: 22 6f 6c 64 22 3a 0d 0a 20 20 20 20 20 20 20 20  "old":..        
06c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
06d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06e0: 20 20 20 72 65 74 75 72 6e 20 4f 6c 64 54 65 73     return OldTes
06f0: 74 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ts();..         
0700: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0710: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
0720: 64 61 74 65 74 69 6d 65 22 3a 0d 0a 20 20 20 20  datetime":..    
0730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
0740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0750: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61         return Da
0760: 74 65 54 69 6d 65 54 65 73 74 28 29 3b 0d 0a 20  teTimeTest();.. 
0770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0780: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
0790: 20 20 63 61 73 65 20 22 64 61 74 65 74 69 6d 65    case "datetime
07a0: 32 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2":..           
07b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07d0: 73 74 72 69 6e 67 20 64 61 74 65 54 69 6d 65 46  string dateTimeF
07e0: 6f 72 6d 61 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  ormat = null;...
07f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0800: 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73 2e         if (args.
0810: 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20  Length > 1)..   
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0830: 20 20 20 20 20 20 20 64 61 74 65 54 69 6d 65 46         dateTimeF
0840: 6f 72 6d 61 74 20 3d 20 61 72 67 73 5b 31 5d 3b  ormat = args[1];
0850: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
0860: 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69            DateTi
0870: 6d 65 54 65 73 74 32 28 64 61 74 65 54 69 6d 65  meTest2(dateTime
0880: 46 6f 72 6d 61 74 29 3b 0d 0a 20 20 20 20 20 20  Format);..      
0890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08a0: 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20  return 0;..     
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
08d0: 73 65 20 22 73 6b 69 70 22 3a 0d 0a 20 20 20 20  se "skip":..    
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
08f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0900: 20 20 20 20 20 20 20 69 6e 74 20 70 61 67 65 53         int pageS
0910: 69 7a 65 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ize = 0;....    
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74    if (args.Lengt
0940: 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20  h > 1)..        
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
0960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0970: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 20 3d             arg =
0980: 20 61 72 67 73 5b 31 5d 3b 0d 0a 0d 0a 20 20 20   args[1];....   
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09a0: 20 20 20 20 20 20 20 69 66 20 28 61 72 67 20 21         if (arg !
09b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
09c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09d0: 20 20 20 20 20 20 20 70 61 67 65 53 69 7a 65 20         pageSize 
09e0: 3d 20 69 6e 74 2e 50 61 72 73 65 28 61 72 67 2e  = int.Parse(arg.
09f0: 54 72 69 6d 28 29 29 3b 0d 0a 20 20 20 20 20 20  Trim());..      
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
0a20: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
0a30: 6e 20 53 6b 69 70 54 65 73 74 28 70 61 67 65 53  n SkipTest(pageS
0a40: 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ize);..         
0a50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0a60: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
0a70: 73 75 62 73 74 72 69 6e 67 22 3a 0d 0a 20 20 20  substring":..   
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0aa0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
0ab0: 75 62 53 74 72 69 6e 67 54 65 73 74 28 29 3b 0d  ubStringTest();.
0ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0ad0: 20 20 20 7d 0d 0a 23 69 66 20 55 53 45 5f 49 4e     }..#if USE_IN
0ae0: 54 45 52 4f 50 5f 44 4c 4c 20 26 26 20 49 4e 54  TEROP_DLL && INT
0af0: 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46  EROP_EXTENSION_F
0b00: 55 4e 43 54 49 4f 4e 53 0d 0a 20 20 20 20 20 20  UNCTIONS..      
0b10: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 75 6e          case "un
0b20: 69 6f 6e 61 6c 6c 22 3a 0d 0a 20 20 20 20 20 20  ionall":..      
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b50: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 69 6f       return Unio
0b60: 6e 41 6c 6c 54 65 73 74 28 29 3b 0d 0a 20 20 20  nAllTest();..   
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
0b80: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
0b90: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 65 6e          case "en
0ba0: 64 73 77 69 74 68 22 3a 0d 0a 20 20 20 20 20 20  dswith":..      
0bb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bd0: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
0be0: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c00: 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e 67     if (args.Leng
0c10: 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20  th > 1)..       
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75              valu
0c50: 65 20 3d 20 61 72 67 73 5b 31 5d 3b 0d 0a 0d 0a  e = args[1];....
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
0c80: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue != null)..  
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75              valu
0cb0: 65 20 3d 20 76 61 6c 75 65 2e 54 72 69 6d 28 29  e = value.Trim()
0cc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
0cd0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cf0: 20 20 20 20 72 65 74 75 72 6e 20 45 6e 64 73 57      return EndsW
0d00: 69 74 68 54 65 73 74 28 76 61 6c 75 65 29 3b 0d  ithTest(value);.
0d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0d20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
0d30: 20 20 20 20 63 61 73 65 20 22 73 74 61 72 74 73      case "starts
0d40: 77 69 74 68 22 3a 0d 0a 20 20 20 20 20 20 20 20  with":..        
0d50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d70: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20     string value 
0d80: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0da0: 20 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74 68   if (args.Length
0db0: 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20   > 1)..         
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0de0: 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20            value 
0df0: 3d 20 61 72 67 73 5b 31 5d 3b 0d 0a 0d 0a 20 20  = args[1];....  
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e10: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
0e20: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e40: 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20            value 
0e50: 3d 20 76 61 6c 75 65 2e 54 72 69 6d 28 29 3b 0d  = value.Trim();.
0e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0e70: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e90: 20 20 72 65 74 75 72 6e 20 53 74 61 72 74 73 57    return StartsW
0ea0: 69 74 68 54 65 73 74 28 76 61 6c 75 65 29 3b 0d  ithTest(value);.
0eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0ec0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
0ed0: 20 20 20 20 63 61 73 65 20 22 65 66 74 72 61 6e      case "eftran
0ee0: 73 61 63 74 69 6f 6e 22 3a 0d 0a 20 20 20 20 20  saction":..     
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
0f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f10: 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65        bool value
0f20: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
0f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f40: 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e 67     if (args.Leng
0f50: 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20  th > 1)..       
0f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0f80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
0f90: 21 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28 61  !bool.TryParse(a
0fa0: 72 67 73 5b 31 5d 2c 20 6f 75 74 20 76 61 6c 75  rgs[1], out valu
0fb0: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ff0: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e  Console.WriteLin
1000: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1020: 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 70 61        "cannot pa
1030: 72 73 65 20 5c 22 7b 30 7d 5c 22 20 61 73 20 62  rse \"{0}\" as b
1040: 6f 6f 6c 65 61 6e 22 2c 0d 0a 20 20 20 20 20 20  oolean",..      
1050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1060: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73              args
1070: 5b 31 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  [1]);....       
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1090: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
10a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f0: 72 65 74 75 72 6e 20 45 46 54 72 61 6e 73 61 63  return EFTransac
1100: 74 69 6f 6e 54 65 73 74 28 76 61 6c 75 65 29 3b  tionTest(value);
1110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1120: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1130: 20 20 20 20 20 63 61 73 65 20 22 69 6e 73 65 72       case "inser
1140: 74 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t":..           
1150: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1170: 72 65 74 75 72 6e 20 49 6e 73 65 72 74 54 65 73  return InsertTes
1180: 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t();..          
1190: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11a0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 75           case "u
11b0: 70 64 61 74 65 22 3a 0d 0a 20 20 20 20 20 20 20  pdate":..       
11c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e0: 20 20 20 20 72 65 74 75 72 6e 20 55 70 64 61 74      return Updat
11f0: 65 54 65 73 74 28 29 3b 0d 0a 20 20 20 20 20 20  eTest();..      
1200: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
1220: 65 20 22 62 69 6e 61 72 79 67 75 69 64 22 3a 0d  e "binaryguid":.
1230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1240: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1250: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1260: 20 76 61 6c 75 65 20 3d 20 66 61 6c 73 65 3b 0d   value = false;.
1270: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1280: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67           if (arg
1290: 73 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20  s.Length > 1).. 
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d0: 20 20 69 66 20 28 21 62 6f 6f 6c 2e 54 72 79 50    if (!bool.TryP
12e0: 61 72 73 65 28 61 72 67 73 5b 31 5d 2c 20 6f 75  arse(args[1], ou
12f0: 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20  t value))..     
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1310: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1330: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
1340: 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20  iteLine(..      
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1360: 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e              "can
1370: 6e 6f 74 20 70 61 72 73 65 20 5c 22 7b 30 7d 5c  not parse \"{0}\
1380: 22 20 61 73 20 62 6f 6f 6c 65 61 6e 22 2c 0d 0a  " as boolean",..
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b0: 20 20 61 72 67 73 5b 31 5d 29 3b 0d 0a 0d 0a 20    args[1]);.... 
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13e0: 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20  urn 1;..        
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1410: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1430: 20 20 20 20 20 20 72 65 74 75 72 6e 20 42 69 6e        return Bin
1440: 61 72 79 47 75 69 64 54 65 73 74 28 76 61 6c 75  aryGuidTest(valu
1450: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
1460: 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 4e 45         }..#if NE
1470: 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c  T_40 || NET_45 |
1480: 7c 20 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45 54  | NET_451 || NET
1490: 5f 34 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20 7c  _452 || NET_46 |
14a0: 7c 20 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45 54  | NET_461 || NET
14b0: 5f 34 36 32 20 7c 7c 20 4e 45 54 5f 34 37 0d 0a  _462 || NET_47..
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
14d0: 73 65 20 22 62 69 6e 61 72 79 67 75 69 64 32 22  se "binaryguid2"
14e0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
14f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1510: 6f 6c 20 76 61 6c 75 65 20 3d 20 66 61 6c 73 65  ol value = false
1520: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1530: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
1540: 72 67 73 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d  rgs.Length > 1).
1550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1560: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1580: 20 20 20 20 69 66 20 28 21 62 6f 6f 6c 2e 54 72      if (!bool.Tr
1590: 79 50 61 72 73 65 28 61 72 67 73 5b 31 5d 2c 20  yParse(args[1], 
15a0: 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20  out value))..   
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e0: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
15f0: 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20  WriteLine(..    
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
1620: 61 6e 6e 6f 74 20 70 61 72 73 65 20 5c 22 7b 30  annot parse \"{0
1630: 7d 5c 22 20 61 73 20 62 6f 6f 6c 65 61 6e 22 2c  }\" as boolean",
1640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1660: 20 20 20 20 61 72 67 73 5b 31 5d 29 3b 0d 0a 0d      args[1]);...
1670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1690: 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20  eturn 1;..      
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 42          return B
16f0: 69 6e 61 72 79 47 75 69 64 54 65 73 74 32 28 76  inaryGuidTest2(v
1700: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
1710: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
1720: 64 69 66 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20  dif..#if NET_40 
1730: 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54  || NET_45 || NET
1740: 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20  _451 || NET_452 
1750: 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54  || NET_46 || NET
1760: 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32 20  _461 || NET_462 
1770: 7c 7c 20 4e 45 54 5f 34 37 0d 0a 20 20 20 20 20  || NET_47..     
1780: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 72           case "r
1790: 6f 75 6e 64 22 3a 0d 0a 20 20 20 20 20 20 20 20  ound":..        
17a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c0: 20 20 20 72 65 74 75 72 6e 20 52 6f 75 6e 64 54     return RoundT
17d0: 65 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  est();..        
17e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
17f0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
1800: 20 20 20 63 61 73 65 20 22 63 6f 6d 70 6c 65 78     case "complex
1810: 70 72 69 6d 61 72 79 6b 65 79 22 3a 0d 0a 20 20  primarykey":..  
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1840: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1850: 43 6f 6d 70 6c 65 78 50 72 69 6d 61 72 79 4b 65  ComplexPrimaryKe
1860: 79 54 65 73 74 28 29 3b 0d 0a 20 20 20 20 20 20  yTest();..      
1870: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
1890: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
18a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c0: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c    Console.WriteL
18d0: 69 6e 65 28 22 75 6e 6b 6e 6f 77 6e 20 74 65 73  ine("unknown tes
18e0: 74 20 5c 22 7b 30 7d 5c 22 22 2c 20 61 72 67 29  t \"{0}\"", arg)
18f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1900: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1910: 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
1920: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1930: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
1940: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
1950: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
1960: 41 74 74 65 6d 70 74 73 20 74 6f 20 6f 62 74 61  Attempts to obta
1970: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
1980: 67 20 73 74 6f 72 65 20 63 6f 6e 6e 65 63 74 69  g store connecti
1990: 6f 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 28 61  on..      /// (a
19a0: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 62 43 6f   <see cref="DbCo
19b0: 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 29 20 66 72  nnection" />) fr
19c0: 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69 65 64  om the specified
19d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65  ..      /// <see
19e0: 20 63 72 65 66 3d 22 45 6e 74 69 74 79 43 6f 6e   cref="EntityCon
19f0: 6e 65 63 74 69 6f 6e 22 20 2f 3e 2e 0d 0a 20 20  nection" />...  
1a00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1a10: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  y>..      /// <p
1a20: 61 72 61 6d 20 6e 61 6d 65 3d 22 65 6e 74 69 74  aram name="entit
1a30: 79 43 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20  yConnection">.. 
1a40: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1a50: 65 20 63 72 65 66 3d 22 45 6e 74 69 74 79 43 6f  e cref="EntityCo
1a60: 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 74 6f 20  nnection" /> to 
1a70: 75 73 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  use...      /// 
1a80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1a90: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1aa0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1ab0: 65 20 63 72 65 66 3d 22 44 62 43 6f 6e 6e 65 63  e cref="DbConnec
1ac0: 74 69 6f 6e 22 20 2f 3e 20 2d 4f 52 2d 20 6e 75  tion" /> -OR- nu
1ad0: 6c 6c 20 69 66 20 69 74 0d 0a 20 20 20 20 20 20  ll if it..      
1ae0: 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20 64 65  /// cannot be de
1af0: 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 20  termined...     
1b00: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1b10: 0a 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73  .      private s
1b20: 74 61 74 69 63 20 44 62 43 6f 6e 6e 65 63 74 69  tatic DbConnecti
1b30: 6f 6e 20 47 65 74 53 74 6f 72 65 43 6f 6e 6e 65  on GetStoreConne
1b40: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
1b50: 20 20 45 6e 74 69 74 79 43 6f 6e 6e 65 63 74 69    EntityConnecti
1b60: 6f 6e 20 65 6e 74 69 74 79 43 6f 6e 6e 65 63 74  on entityConnect
1b70: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 29  ion..          )
1b80: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1b90: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1ba0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 65     // NOTE: No e
1bb0: 6e 74 69 74 79 20 63 6f 6e 6e 65 63 74 69 6f 6e  ntity connection
1bc0: 2c 20 6e 6f 20 73 74 6f 72 65 20 63 6f 6e 6e 65  , no store conne
1bd0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...        
1be0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1bf0: 69 66 20 28 65 6e 74 69 74 79 43 6f 6e 6e 65 63  if (entityConnec
1c00: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1c20: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
1c30: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c40: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 57 65       // HACK: We
1c50: 20 6e 65 65 64 20 74 68 65 20 75 6e 64 65 72 6c   need the underl
1c60: 79 69 6e 67 20 73 74 6f 72 65 20 63 6f 6e 6e 65  ying store conne
1c70: 63 74 69 6f 6e 20 61 6e 64 0d 0a 20 20 20 20 20  ction and..     
1c80: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1c90: 65 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e  e legacy version
1ca0: 73 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46 72  s of the .NET Fr
1cb0: 61 6d 65 77 6f 72 6b 20 64 6f 0d 0a 20 20 20 20  amework do..    
1cc0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e        //       n
1cd0: 6f 74 20 65 78 70 6f 73 65 20 69 74 3b 20 74 68  ot expose it; th
1ce0: 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74  erefore, attempt
1cf0: 20 74 6f 20 67 72 61 62 20 69 74 0d 0a 20 20 20   to grab it..   
1d00: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d10: 62 79 20 66 6f 72 63 65 2e 0d 0a 20 20 20 20 20  by force...     
1d20: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d30: 20 20 20 46 69 65 6c 64 49 6e 66 6f 20 66 69 65     FieldInfo fie
1d40: 6c 64 49 6e 66 6f 20 3d 20 74 79 70 65 6f 66 28  ldInfo = typeof(
1d50: 45 6e 74 69 74 79 43 6f 6e 6e 65 63 74 69 6f 6e  EntityConnection
1d60: 29 2e 47 65 74 46 69 65 6c 64 28 0d 0a 20 20 20  ).GetField(..   
1d70: 20 20 20 20 20 20 20 20 20 20 20 22 5f 73 74 6f             "_sto
1d80: 72 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 2c 20 42  reConnection", B
1d90: 69 6e 64 69 6e 67 46 6c 61 67 73 2e 49 6e 73 74  indingFlags.Inst
1da0: 61 6e 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20  ance |..        
1db0: 20 20 20 20 20 20 42 69 6e 64 69 6e 67 46 6c 61        BindingFla
1dc0: 67 73 2e 4e 6f 6e 50 75 62 6c 69 63 29 3b 0d 0a  gs.NonPublic);..
1dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ..          //..
1de0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1df0: 45 3a 20 49 66 20 74 68 65 20 66 69 65 6c 64 20  E: If the field 
1e00: 69 73 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 6a 75  is not found, ju
1e10: 73 74 20 72 65 74 75 72 6e 20 6e 75 6c 6c 2e 0d  st return null..
1e20: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  .          //.. 
1e30: 20 20 20 20 20 20 20 20 20 69 66 20 28 66 69 65           if (fie
1e40: 6c 64 49 6e 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d  ldInfo == null).
1e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1e60: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
1e70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e80: 66 69 65 6c 64 49 6e 66 6f 2e 47 65 74 56 61 6c  fieldInfo.GetVal
1e90: 75 65 28 65 6e 74 69 74 79 43 6f 6e 6e 65 63 74  ue(entityConnect
1ea0: 69 6f 6e 29 20 61 73 20 44 62 43 6f 6e 6e 65 63  ion) as DbConnec
1eb0: 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  tion;..      }..
1ec0: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
1ed0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 64 20    // NOTE: Used 
1ee0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
1ef0: 68 65 20 53 55 42 53 54 52 20 66 75 6e 63 74 69  he SUBSTR functi
1f00: 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 0d 0a 20  on is used to.. 
1f10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6d       //       im
1f20: 70 6c 65 6d 65 6e 74 20 74 68 65 20 53 75 62 73  plement the Subs
1f30: 74 72 69 6e 67 20 6d 65 74 68 6f 64 2e 0d 0a 20  tring method... 
1f40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 70       //..      p
1f50: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
1f60: 74 20 53 75 62 53 74 72 69 6e 67 54 65 73 74 28  t SubStringTest(
1f70: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1f80: 20 20 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72        using (nor
1f90: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
1fa0: 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77   db = new northw
1fb0: 69 6e 64 45 46 45 6e 74 69 74 69 65 73 28 29 29  indEFEntities())
1fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2000: 20 20 20 20 20 62 6f 6f 6c 20 6f 6e 63 65 20 3d       bool once =
2010: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
2030: 20 71 75 65 72 79 20 3d 20 64 62 2e 43 75 73 74   query = db.Cust
2040: 6f 6d 65 72 73 2e 53 65 6c 65 63 74 28 0d 0a 20  omers.Select(.. 
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2060: 20 20 20 20 20 70 20 3d 3e 20 22 74 65 73 74 22       p => "test"
2070: 2e 53 75 62 73 74 72 69 6e 67 28 31 29 20 21 3d  .Substring(1) !=
2080: 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   null);....     
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
20a0: 65 61 63 68 20 28 76 61 72 20 72 65 73 75 6c 74  each (var result
20b0: 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20   in query)..    
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
20d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e0: 20 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65 29         if (once)
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 43 6f 6e 73              Cons
2110: 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b 0d  ole.Write(' ');.
2120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2130: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
2140: 2e 57 72 69 74 65 28 72 65 73 75 6c 74 29 3b 0d  .Write(result);.
2150: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2160: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
2170: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2180: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a0: 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20  return 0;..     
21b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
21c0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
21d0: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c    Console.WriteL
2210: 69 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20 20 20  ine(e);..       
2220: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2230: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2240: 20 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20     return 1;..  
2250: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
2260: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
2270: 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74 20 74  : Used to test t
2280: 68 65 20 66 69 78 20 66 6f 72 20 74 69 63 6b 65  he fix for ticke
2290: 74 20 5b 38 62 37 64 31 37 39 63 33 63 5d 2e 0d  t [8b7d179c3c]..
22a0: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
22b0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
22c0: 69 6e 74 20 53 6b 69 70 54 65 73 74 28 69 6e 74  int SkipTest(int
22d0: 20 70 61 67 65 53 69 7a 65 29 0d 0a 20 20 20 20   pageSize)..    
22e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75    {..          u
22f0: 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45  sing (northwindE
2300: 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e  FEntities db = n
2310: 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e  ew northwindEFEn
2320: 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20  tities())..     
2330: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2340: 20 20 20 20 20 20 62 6f 6f 6c 20 6f 6e 63 65 20        bool once 
2350: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
2360: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e          int coun
2370: 74 20 3d 20 64 62 2e 43 75 73 74 6f 6d 65 72 73  t = db.Customers
2380: 2e 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20  .Count();....   
2390: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 50             int P
23a0: 61 67 65 43 6f 75 6e 74 20 3d 20 28 70 61 67 65  ageCount = (page
23b0: 53 69 7a 65 20 21 3d 20 30 29 20 3f 0d 0a 20 20  Size != 0) ?..  
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d0: 28 63 6f 75 6e 74 20 2f 20 70 61 67 65 53 69 7a  (count / pageSiz
23e0: 65 29 20 2b 20 28 28 63 6f 75 6e 74 20 25 20 70  e) + ((count % p
23f0: 61 67 65 53 69 7a 65 29 20 3d 3d 20 30 20 3f 20  ageSize) == 0 ? 
2400: 30 20 3a 20 31 29 20 3a 20 31 3b 0d 0a 0d 0a 20  0 : 1) : 1;.... 
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
2420: 20 28 69 6e 74 20 70 61 67 65 49 6e 64 65 78 20   (int pageIndex 
2430: 3d 20 30 3b 20 70 61 67 65 49 6e 64 65 78 20 3c  = 0; pageIndex <
2440: 20 50 61 67 65 43 6f 75 6e 74 3b 20 70 61 67 65   PageCount; page
2450: 49 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  Index++)..      
2460: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
2480: 20 71 75 65 72 79 20 3d 20 64 62 2e 43 75 73 74   query = db.Cust
2490: 6f 6d 65 72 73 2e 4f 72 64 65 72 42 79 28 70 20  omers.OrderBy(p 
24a0: 3d 3e 20 70 2e 43 69 74 79 29 2e 0d 0a 20 20 20  => p.City)...   
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 20 20 20 53 6b 69 70 28 70 61 67 65 53 69 7a 65     Skip(pageSize
24d0: 20 2a 20 70 61 67 65 49 6e 64 65 78 29 2e 54 61   * pageIndex).Ta
24e0: 6b 65 28 70 61 67 65 53 69 7a 65 29 3b 0d 0a 0d  ke(pageSize);...
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2500: 20 20 20 66 6f 72 65 61 63 68 20 28 43 75 73 74     foreach (Cust
2510: 6f 6d 65 72 73 20 63 75 73 74 6f 6d 65 72 73 20  omers customers 
2520: 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20  in query)..     
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2550: 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65 29 0d        if (once).
2560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2570: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
2580: 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a  le.Write(' ');..
2590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a0: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
25b0: 57 72 69 74 65 28 63 75 73 74 6f 6d 65 72 73 2e  Write(customers.
25c0: 43 75 73 74 6f 6d 65 72 49 44 29 3b 0d 0a 0d 0a  CustomerID);....
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 74 72 75        once = tru
25f0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2600: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2610: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2620: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2630: 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20     return 0;..  
2640: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
2650: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
2660: 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74 20 74  : Used to test t
2670: 68 65 20 66 69 78 20 66 6f 72 20 74 69 63 6b 65  he fix for ticke
2680: 74 20 5b 35 39 65 64 63 31 30 31 38 62 5d 2e 0d  t [59edc1018b]..
2690: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
26a0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
26b0: 69 6e 74 20 45 6e 64 73 57 69 74 68 54 65 73 74  int EndsWithTest
26c0: 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a  (string value)..
26d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26e0: 20 20 20 75 73 69 6e 67 20 28 6e 6f 72 74 68 77     using (northw
26f0: 69 6e 64 45 46 45 6e 74 69 74 69 65 73 20 64 62  indEFEntities db
2700: 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69 6e 64   = new northwind
2710: 45 46 45 6e 74 69 74 69 65 73 28 29 29 0d 0a 20  EFEntities()).. 
2720: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2730: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f            bool o
2740: 6e 63 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  nce = false;..  
2750: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
2760: 71 75 65 72 79 20 3d 20 66 72 6f 6d 20 63 20 69  query = from c i
2770: 6e 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 0d 0a  n db.Customers..
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2790: 20 20 20 20 20 20 20 20 20 20 77 68 65 72 65 20            where 
27a0: 63 2e 43 69 74 79 2e 45 6e 64 73 57 69 74 68 28  c.City.EndsWith(
27b0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  value)..        
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d0: 20 20 6f 72 64 65 72 62 79 20 63 2e 43 75 73 74    orderby c.Cust
27e0: 6f 6d 65 72 49 44 0d 0a 20 20 20 20 20 20 20 20  omerID..        
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2800: 20 20 73 65 6c 65 63 74 20 63 3b 0d 0a 0d 0a 20    select c;.... 
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
2820: 65 61 63 68 20 28 43 75 73 74 6f 6d 65 72 73 20  each (Customers 
2830: 63 75 73 74 6f 6d 65 72 73 20 69 6e 20 71 75 65  customers in que
2840: 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry)..           
2850: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2860: 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65          if (once
2870: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2880: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
2890: 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a  .Write(' ');....
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28    Console.Write(
28c0: 63 75 73 74 6f 6d 65 72 73 2e 43 75 73 74 6f 6d  customers.Custom
28d0: 65 72 49 44 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  erID);....      
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65              once
28f0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2900: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2910: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2920: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20      return 0;.. 
2930: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2940: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
2950: 45 3a 20 55 73 65 64 20 74 6f 20 76 65 72 69 66  E: Used to verif
2960: 79 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 66  y the behavior f
2970: 72 6f 6d 20 74 69 63 6b 65 74 20 5b 30 30 66 38  rom ticket [00f8
2980: 36 66 39 37 33 39 5d 2e 0d 0a 20 20 20 20 20 20  6f9739]...      
2990: 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74  //..      privat
29a0: 65 20 73 74 61 74 69 63 20 69 6e 74 20 53 74 61  e static int Sta
29b0: 72 74 73 57 69 74 68 54 65 73 74 28 73 74 72 69  rtsWithTest(stri
29c0: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20  ng value)..     
29d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73   {..          us
29e0: 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46  ing (northwindEF
29f0: 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65  Entities db = ne
2a00: 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74  w northwindEFEnt
2a10: 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20  ities())..      
2a20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a30: 20 20 20 20 20 62 6f 6f 6c 20 6f 6e 63 65 20 3d       bool once =
2a40: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2a50: 20 20 20 20 20 20 20 76 61 72 20 71 75 65 72 79         var query
2a60: 20 3d 20 66 72 6f 6d 20 63 20 69 6e 20 64 62 2e   = from c in db.
2a70: 43 75 73 74 6f 6d 65 72 73 0d 0a 20 20 20 20 20  Customers..     
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a90: 20 20 20 20 20 77 68 65 72 65 20 63 2e 43 69 74       where c.Cit
2aa0: 79 2e 53 74 61 72 74 73 57 69 74 68 28 76 61 6c  y.StartsWith(val
2ab0: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue)..           
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
2ad0: 72 64 65 72 62 79 20 63 2e 43 75 73 74 6f 6d 65  rderby c.Custome
2ae0: 72 49 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rID..           
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2b00: 65 6c 65 63 74 20 63 3b 0d 0a 0d 0a 20 20 20 20  elect c;....    
2b10: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
2b20: 68 20 28 43 75 73 74 6f 6d 65 72 73 20 63 75 73  h (Customers cus
2b30: 74 6f 6d 65 72 73 20 69 6e 20 71 75 65 72 79 29  tomers in query)
2b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b60: 20 20 20 20 20 69 66 20 28 6f 6e 63 65 29 0d 0a       if (once)..
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b80: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
2b90: 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20  ite(' ');....   
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
2bb0: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 63 75 73  onsole.Write(cus
2bc0: 74 6f 6d 65 72 73 2e 43 75 73 74 6f 6d 65 72 49  tomers.CustomerI
2bd0: 44 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  D);....         
2be0: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
2bf0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2c00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c20: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20   return 0;..    
2c30: 20 20 7d 0d 0a 0d 0a 23 69 66 20 55 53 45 5f 49    }....#if USE_I
2c40: 4e 54 45 52 4f 50 5f 44 4c 4c 20 26 26 20 49 4e  NTEROP_DLL && IN
2c50: 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f  TEROP_EXTENSION_
2c60: 46 55 4e 43 54 49 4f 4e 53 0d 0a 20 20 20 20 20  FUNCTIONS..     
2c70: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
2c80: 54 45 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74  TE: Used to test
2c90: 20 74 68 65 20 66 69 78 20 66 6f 72 20 74 69 63   the fix for tic
2ca0: 6b 65 74 20 5b 30 61 33 32 38 38 35 31 30 39 5d  ket [0a32885109]
2cb0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
2cc0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2cd0: 63 20 69 6e 74 20 55 6e 69 6f 6e 41 6c 6c 54 65  c int UnionAllTe
2ce0: 73 74 28 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  st()..      {.. 
2cf0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2d00: 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74  northwindEFEntit
2d10: 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72  ies db = new nor
2d20: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
2d30: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ())..          {
2d40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d50: 62 6f 6f 6c 20 6f 6e 63 65 20 3d 20 66 61 6c 73  bool once = fals
2d60: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2d70: 20 20 20 20 76 61 72 20 63 75 73 74 6f 6d 65 72      var customer
2d80: 73 31 20 3d 20 64 62 2e 43 75 73 74 6f 6d 65 72  s1 = db.Customer
2d90: 73 2e 57 68 65 72 65 28 0d 0a 20 20 20 20 20 20  s.Where(..      
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 66 20 3d 3e              f =>
2db0: 20 66 2e 4f 72 64 65 72 73 2e 41 6e 79 28 29 29   f.Orders.Any())
2dc0: 2e 4f 72 64 65 72 42 79 44 65 73 63 65 6e 64 69  .OrderByDescendi
2dd0: 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng(..           
2de0: 20 20 20 20 20 20 20 20 20 66 20 3d 3e 20 66 2e           f => f.
2df0: 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 2e 53 6b 69  CompanyName).Ski
2e00: 70 28 31 29 2e 54 61 6b 65 28 31 29 3b 0d 0a 0d  p(1).Take(1);...
2e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76  .              v
2e20: 61 72 20 63 75 73 74 6f 6d 65 72 73 32 20 3d 20  ar customers2 = 
2e30: 64 62 2e 43 75 73 74 6f 6d 65 72 73 2e 57 68 65  db.Customers.Whe
2e40: 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re(..           
2e50: 20 20 20 20 20 20 20 66 20 3d 3e 20 66 2e 4f 72         f => f.Or
2e60: 64 65 72 73 2e 41 6e 79 28 29 29 2e 4f 72 64 65  ders.Any()).Orde
2e70: 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rBy(..          
2e80: 20 20 20 20 20 20 20 20 20 20 66 20 3d 3e 20 66            f => f
2e90: 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 2e 53 6b  .CompanyName).Sk
2ea0: 69 70 28 31 29 2e 54 61 6b 65 28 31 29 3b 0d 0a  ip(1).Take(1);..
2eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ec0: 76 61 72 20 63 75 73 74 6f 6d 65 72 73 33 20 3d  var customers3 =
2ed0: 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 2e 57 68   db.Customers.Wh
2ee0: 65 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ere(..          
2ef0: 20 20 20 20 20 20 20 20 66 20 3d 3e 20 66 2e 43          f => f.C
2f00: 75 73 74 6f 6d 65 72 49 44 2e 53 74 61 72 74 73  ustomerID.Starts
2f10: 57 69 74 68 28 22 42 22 29 29 2e 4f 72 64 65 72  With("B")).Order
2f20: 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  By(..           
2f30: 20 20 20 20 20 20 20 20 20 66 20 3d 3e 20 66 2e           f => f.
2f40: 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 2e 53 6b 69  CompanyName).Ski
2f50: 70 28 31 29 2e 54 61 6b 65 28 31 29 3b 0d 0a 0d  p(1).Take(1);...
2f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
2f70: 6f 72 65 61 63 68 20 28 76 61 72 20 63 75 73 74  oreach (var cust
2f80: 6f 6d 65 72 20 69 6e 20 63 75 73 74 6f 6d 65 72  omer in customer
2f90: 73 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s1)..           
2fa0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2fb0: 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65          if (once
2fc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2fd0: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
2fe0: 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a  .Write(' ');....
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3000: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28    Console.Write(
3010: 63 75 73 74 6f 6d 65 72 2e 43 75 73 74 6f 6d 65  customer.Custome
3020: 72 49 44 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rID);..         
3030: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
3040: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
3050: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3060: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
3070: 28 76 61 72 20 63 75 73 74 6f 6d 65 72 20 69 6e  (var customer in
3080: 20 63 75 73 74 6f 6d 65 72 73 32 29 0d 0a 20 20   customers2)..  
3090: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b0: 20 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20   if (once)..    
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28    Console.Write(
30e0: 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ' ');....       
30f0: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
3100: 6c 65 2e 57 72 69 74 65 28 63 75 73 74 6f 6d 65  le.Write(custome
3110: 72 2e 43 75 73 74 6f 6d 65 72 49 44 29 3b 0d 0a  r.CustomerID);..
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 20 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b 0d 0a    once = true;..
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3150: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3160: 20 66 6f 72 65 61 63 68 20 28 76 61 72 20 63 75   foreach (var cu
3170: 73 74 6f 6d 65 72 20 69 6e 20 63 75 73 74 6f 6d  stomer in custom
3180: 65 72 73 33 29 0d 0a 20 20 20 20 20 20 20 20 20  ers3)..         
3190: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e            if (on
31b0: 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
31c0: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
31d0: 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a  le.Write(' ');..
31e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31f0: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
3200: 65 28 63 75 73 74 6f 6d 65 72 2e 43 75 73 74 6f  e(customer.Custo
3210: 6d 65 72 49 44 29 3b 0d 0a 20 20 20 20 20 20 20  merID);..       
3220: 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20             once 
3230: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
3240: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3250: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
3260: 68 20 28 76 61 72 20 63 75 73 74 6f 6d 65 72 20  h (var customer 
3270: 69 6e 20 63 75 73 74 6f 6d 65 72 73 31 2e 43 6f  in customers1.Co
3280: 6e 63 61 74 28 63 75 73 74 6f 6d 65 72 73 32 29  ncat(customers2)
3290: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
32a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32b0: 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65 29 0d        if (once).
32c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32d0: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
32e0: 72 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20 20  rite(' ');....  
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3300: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 63 75  Console.Write(cu
3310: 73 74 6f 6d 65 72 2e 43 75 73 74 6f 6d 65 72 49  stomer.CustomerI
3320: 44 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  D);..           
3330: 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 74 72         once = tr
3340: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
3350: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3360: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 76        foreach (v
3370: 61 72 20 63 75 73 74 6f 6d 65 72 20 69 6e 0d 0a  ar customer in..
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3390: 20 20 20 20 63 75 73 74 6f 6d 65 72 73 31 2e 43      customers1.C
33a0: 6f 6e 63 61 74 28 63 75 73 74 6f 6d 65 72 73 32  oncat(customers2
33b0: 29 2e 43 6f 6e 63 61 74 28 63 75 73 74 6f 6d 65  ).Concat(custome
33c0: 72 73 33 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rs3))..         
33d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e            if (on
33f0: 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
3400: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
3410: 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a  le.Write(' ');..
3420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3430: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
3440: 65 28 63 75 73 74 6f 6d 65 72 2e 43 75 73 74 6f  e(customer.Custo
3450: 6d 65 72 49 44 29 3b 0d 0a 20 20 20 20 20 20 20  merID);..       
3460: 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20             once 
3470: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
3480: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3490: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34a0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20     return 0;..  
34b0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
34c0: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
34d0: 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 64 20 74   // NOTE: Used t
34e0: 6f 20 74 65 73 74 20 74 68 65 20 66 69 78 20 66  o test the fix f
34f0: 6f 72 20 74 69 63 6b 65 74 20 5b 63 63 66 61 36  or ticket [ccfa6
3500: 39 66 63 33 32 5d 2e 0d 0a 20 20 20 20 20 20 2f  9fc32]...      /
3510: 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65  /..      private
3520: 20 73 74 61 74 69 63 20 69 6e 74 20 45 46 54 72   static int EFTr
3530: 61 6e 73 61 63 74 69 6f 6e 54 65 73 74 28 62 6f  ansactionTest(bo
3540: 6f 6c 20 61 64 64 29 0d 0a 20 20 20 20 20 20 7b  ol add)..      {
3550: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ..          //..
3560: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3570: 45 3a 20 53 6f 6d 65 20 6f 66 20 74 68 65 73 65  E: Some of these
3580: 20 74 65 72 72 69 74 6f 72 69 65 73 20 61 6c 72   territories alr
3590: 65 61 64 79 20 65 78 69 73 74 20 61 6e 64 20 73  eady exist and s
35a0: 68 6f 75 6c 64 20 63 61 75 73 65 0d 0a 20 20 20  hould cause..   
35b0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
35c0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 74 6f 20  an exception to 
35d0: 62 65 20 74 68 72 6f 77 6e 20 77 68 65 6e 20 77  be thrown when w
35e0: 65 20 74 72 79 20 74 6f 20 49 4e 53 45 52 54 20  e try to INSERT 
35f0: 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20  them...         
3600: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 6c   //..          l
3610: 6f 6e 67 5b 5d 20 74 65 72 72 69 74 6f 72 79 49  ong[] territoryI
3620: 64 73 20 3d 20 6e 65 77 20 6c 6f 6e 67 5b 5d 20  ds = new long[] 
3630: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3640: 20 20 20 20 31 2c 20 20 20 20 32 2c 20 20 20 20      1,    2,    
3650: 33 2c 20 20 20 20 34 2c 20 20 20 20 35 2c 20 2f  3,    4,    5, /
3660: 2f 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 0d  / NOTE: Success.
3670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3680: 20 20 36 2c 20 20 20 20 37 2c 20 20 20 20 38 2c    6,    7,    8,
3690: 20 20 20 20 39 2c 20 20 20 31 30 2c 20 2f 2f 20      9,   10, // 
36a0: 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 0d 0a 20  NOTE: Success.. 
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 35 37               157
36c0: 36 2c 20 31 35 37 37 2c 20 31 35 37 38 2c 20 31  6, 1577, 1578, 1
36d0: 35 37 39 2c 20 31 35 38 30 2c 20 2f 2f 20 4e 4f  579, 1580, // NO
36e0: 54 45 3a 20 53 75 63 63 65 73 73 0d 0a 20 20 20  TE: Success..   
36f0: 20 20 20 20 20 20 20 20 20 20 20 31 35 38 31 2c             1581,
3700: 20 31 37 33 30 2c 20 31 38 33 33 2c 20 32 31 31   1730, 1833, 211
3710: 36 2c 20 32 31 33 39 2c 20 2f 2f 20 4e 4f 54 45  6, 2139, // NOTE
3720: 3a 20 46 61 69 6c 20 28 31 35 38 31 29 0d 0a 20  : Fail (1581).. 
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 31 34               214
3740: 30 2c 20 32 31 34 31 20 20 20 20 20 20 20 20 20  0, 2141         
3750: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
3760: 54 45 3a 20 53 6b 69 70 70 65 64 0d 0a 20 20 20  TE: Skipped..   
3770: 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20         };....   
3780: 20 20 20 20 20 20 20 69 66 20 28 61 64 64 29 0d         if (add).
3790: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
37b0: 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e  g (northwindEFEn
37c0: 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65 77 20  tities db = new 
37d0: 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74  northwindEFEntit
37e0: 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ies())..        
37f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3800: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
3810: 20 28 54 72 61 6e 73 61 63 74 69 6f 6e 53 63 6f   (TransactionSco
3820: 70 65 20 73 63 6f 70 65 20 3d 20 6e 65 77 20 54  pe scope = new T
3830: 72 61 6e 73 61 63 74 69 6f 6e 53 63 6f 70 65 28  ransactionScope(
3840: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
3850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3870: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3880: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
3890: 3a 20 2a 52 45 51 55 49 52 45 44 2a 20 54 68 69  : *REQUIRED* Thi
38a0: 73 20 69 73 20 72 65 71 75 69 72 65 64 20 73 6f  s is required so
38b0: 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20   that the..     
38c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38d0: 20 2f 2f 20 20 20 20 20 20 20 45 6e 74 69 74 79   //       Entity
38e0: 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 70 72   Framework is pr
38f0: 65 76 65 6e 74 65 64 20 66 72 6f 6d 20 6f 70 65  evented from ope
3900: 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ning..          
3910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3920: 20 20 20 20 20 6d 75 6c 74 69 70 6c 65 20 63 6f       multiple co
3930: 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74 68 65  nnections to the
3940: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
3950: 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  te..            
3960: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3970: 20 20 20 64 61 74 61 62 61 73 65 20 28 69 2e 65     database (i.e
3980: 2e 20 77 68 69 63 68 20 77 6f 75 6c 64 20 72 65  . which would re
3990: 73 75 6c 74 20 69 6e 20 6d 75 6c 74 69 70 6c 65  sult in multiple
39a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
39b0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
39c0: 20 49 4d 4d 45 44 49 41 54 45 20 74 72 61 6e 73   IMMEDIATE trans
39d0: 61 63 74 69 6f 6e 73 2c 20 74 68 65 72 65 62 79  actions, thereby
39e0: 20 66 61 69 6c 69 6e 67 20 5b 6c 61 74 65 72 0d   failing [later.
39f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a00: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
3a10: 6f 6e 5d 20 77 69 74 68 20 6c 6f 63 6b 69 6e 67  on] with locking
3a20: 20 65 72 72 6f 72 73 29 2e 0d 0a 20 20 20 20 20   errors)...     
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a40: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3a50: 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 43 6f             db.Co
3a60: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
3a70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3a80: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
3a90: 68 20 28 69 6e 74 20 69 64 20 69 6e 20 74 65 72  h (int id in ter
3aa0: 72 69 74 6f 72 79 49 64 73 29 0d 0a 20 20 20 20  ritoryIds)..    
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ac0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3ae0: 65 72 72 69 74 6f 72 69 65 73 20 74 65 72 72 69  erritories terri
3af0: 74 6f 72 69 65 73 20 3d 20 6e 65 77 20 54 65 72  tories = new Ter
3b00: 72 69 74 6f 72 69 65 73 28 29 3b 0d 0a 0d 0a 20  ritories();.... 
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b20: 20 20 20 20 20 20 20 20 20 74 65 72 72 69 74 6f           territo
3b30: 72 69 65 73 2e 54 65 72 72 69 74 6f 72 79 49 44  ries.TerritoryID
3b40: 20 3d 20 69 64 3b 0d 0a 20 20 20 20 20 20 20 20   = id;..        
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 20 20 74 65 72 72 69 74 6f 72 69 65 73 2e 54 65    territories.Te
3b70: 72 72 69 74 6f 72 79 44 65 73 63 72 69 70 74 69  rritoryDescripti
3b80: 6f 6e 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  on = String.Form
3b90: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bb0: 20 20 20 22 54 65 73 74 20 54 65 72 72 69 74 6f     "Test Territo
3bc0: 72 79 20 23 7b 30 7d 22 2c 20 69 64 29 3b 0d 0a  ry #{0}", id);..
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3be0: 20 20 20 20 20 20 20 20 20 20 74 65 72 72 69 74            territ
3bf0: 6f 72 69 65 73 2e 52 65 67 69 6f 6e 73 20 3d 20  ories.Regions = 
3c00: 64 62 2e 52 65 67 69 6f 6e 73 2e 46 69 72 73 74  db.Regions.First
3c10: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c30: 20 64 62 2e 41 64 64 4f 62 6a 65 63 74 28 22 54   db.AddObject("T
3c40: 65 72 72 69 74 6f 72 69 65 73 22 2c 20 74 65 72  erritories", ter
3c50: 72 69 74 6f 72 69 65 73 29 3b 0d 0a 20 20 20 20  ritories);..    
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
3c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ca0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 4e          {..#if N
3cb0: 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20  ET_40 || NET_45 
3cc0: 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45  || NET_451 || NE
3cd0: 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20  T_452 || NET_46 
3ce0: 7c 7c 20 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45  || NET_461 || NE
3cf0: 54 5f 34 36 32 20 7c 7c 20 4e 45 54 5f 34 37 0d  T_462 || NET_47.
3d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3d10: 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 53 61             db.Sa
3d20: 76 65 43 68 61 6e 67 65 73 28 53 61 76 65 4f 70  veChanges(SaveOp
3d30: 74 69 6f 6e 73 2e 4e 6f 6e 65 29 3b 0d 0a 23 65  tions.None);..#e
3d40: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
3d60: 62 2e 53 61 76 65 43 68 61 6e 67 65 73 28 66 61  b.SaveChanges(fa
3d70: 6c 73 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lse);..#endif.. 
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
3db0: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
3dc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3dd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3df0: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
3e00: 69 74 65 4c 69 6e 65 28 65 29 3b 0d 0a 20 20 20  iteLine(e);..   
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
3e40: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
3e50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e70: 20 20 20 20 20 20 20 20 73 63 6f 70 65 2e 43 6f          scope.Co
3e80: 6d 70 6c 65 74 65 28 29 3b 0d 0a 20 20 20 20 20  mplete();..     
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ea0: 20 20 20 20 20 64 62 2e 41 63 63 65 70 74 41 6c       db.AcceptAl
3eb0: 6c 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20  lChanges();..   
3ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ed0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3ee0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3ef0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3f00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3f10: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
3f20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3f30: 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72 74 68      using (north
3f40: 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 20 64  windEFEntities d
3f50: 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69 6e  b = new northwin
3f60: 64 45 46 45 6e 74 69 74 69 65 73 28 29 29 0d 0a  dEFEntities())..
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3f90: 20 20 20 62 6f 6f 6c 20 6f 6e 63 65 20 3d 20 66     bool once = f
3fa0: 61 6c 73 65 3b 0d 0a 23 69 66 20 4e 45 54 5f 34  alse;..#if NET_4
3fb0: 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e  0 || NET_45 || N
3fc0: 45 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35  ET_451 || NET_45
3fd0: 32 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e  2 || NET_46 || N
3fe0: 45 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36  ET_461 || NET_46
3ff0: 32 20 7c 7c 20 4e 45 54 5f 34 37 0d 0a 20 20 20  2 || NET_47..   
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
4010: 61 72 20 71 75 65 72 79 20 3d 20 66 72 6f 6d 20  ar query = from 
4020: 74 20 69 6e 20 64 62 2e 54 65 72 72 69 74 6f 72  t in db.Territor
4030: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
4040: 20 20 20 20 20 20 20 20 20 77 68 65 72 65 20 74           where t
4050: 65 72 72 69 74 6f 72 79 49 64 73 2e 41 73 51 75  erritoryIds.AsQu
4060: 65 72 79 61 62 6c 65 3c 6c 6f 6e 67 3e 28 29 2e  eryable<long>().
4070: 43 6f 6e 74 61 69 6e 73 3c 6c 6f 6e 67 3e 28 74  Contains<long>(t
4080: 2e 54 65 72 72 69 74 6f 72 79 49 44 29 0d 0a 20  .TerritoryID).. 
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40a0: 20 20 20 6f 72 64 65 72 62 79 20 74 2e 54 65 72     orderby t.Ter
40b0: 72 69 74 6f 72 79 49 44 0d 0a 20 20 20 20 20 20  ritoryID..      
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
40d0: 6c 65 63 74 20 74 3b 0d 0a 0d 0a 20 20 20 20 20  lect t;....     
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
40f0: 65 61 63 68 20 28 54 65 72 72 69 74 6f 72 69 65  each (Territorie
4100: 73 20 74 65 72 72 69 74 6f 72 69 65 73 20 69 6e  s territories in
4110: 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20   query)..       
4120: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 20 20 69 66 20 28 6f 6e 63 65 29 0d 0a 20      if (once).. 
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
4170: 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a  .Write(' ');....
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4190: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
41a0: 69 74 65 28 74 65 72 72 69 74 6f 72 69 65 73 2e  ite(territories.
41b0: 54 65 72 72 69 74 6f 72 79 49 44 29 3b 0d 0a 0d  TerritoryID);...
41c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
41d0: 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 74 72         once = tr
41e0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
41f0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6c 73 65 0d         }..#else.
4200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4210: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4220: 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b           // HACK
4230: 3a 20 57 65 20 63 61 6e 6e 6f 74 20 75 73 65 20  : We cannot use 
4240: 74 68 65 20 43 6f 6e 74 61 69 6e 73 20 65 78 74  the Contains ext
4250: 65 6e 73 69 6f 6e 20 6d 65 74 68 6f 64 20 77 69  ension method wi
4260: 74 68 69 6e 20 61 0d 0a 20 20 20 20 20 20 20 20  thin a..        
4270: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
4280: 20 20 20 4c 49 4e 51 20 71 75 65 72 79 20 77 69     LINQ query wi
4290: 74 68 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  th the .NET Fram
42a0: 65 77 6f 72 6b 20 33 2e 35 2e 0d 0a 20 20 20 20  ework 3.5...    
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
42c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42d0: 20 20 20 20 76 61 72 20 71 75 65 72 79 20 3d 20      var query = 
42e0: 66 72 6f 6d 20 74 20 69 6e 20 64 62 2e 54 65 72  from t in db.Ter
42f0: 72 69 74 6f 72 69 65 73 0d 0a 20 20 20 20 20 20  ritories..      
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 72                or
4310: 64 65 72 62 79 20 74 2e 54 65 72 72 69 74 6f 72  derby t.Territor
4320: 79 49 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  yID..           
4330: 20 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 20           select 
4340: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
4350: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
4360: 28 54 65 72 72 69 74 6f 72 69 65 73 20 74 65 72  (Territories ter
4370: 72 69 74 6f 72 69 65 73 20 69 6e 20 71 75 65 72  ritories in quer
4380: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
4390: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
43b0: 66 20 28 41 72 72 61 79 2e 49 6e 64 65 78 4f 66  f (Array.IndexOf
43c0: 28 74 65 72 72 69 74 6f 72 79 49 64 73 2c 20 74  (territoryIds, t
43d0: 65 72 72 69 74 6f 72 69 65 73 2e 54 65 72 72 69  erritories.Terri
43e0: 74 6f 72 79 49 44 29 20 3d 3d 20 2d 31 29 0d 0a  toryID) == -1)..
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
4410: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4430: 28 6f 6e 63 65 29 0d 0a 20 20 20 20 20 20 20 20  (once)..        
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28    Console.Write(
4460: 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ' ');....       
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
4480: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 74 65 72  onsole.Write(ter
4490: 72 69 74 6f 72 69 65 73 2e 54 65 72 72 69 74 6f  ritories.Territo
44a0: 72 79 49 44 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ryID);....      
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44c0: 6f 6e 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  once = true;..  
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
44f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4500: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4510: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
4520: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4530: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
4540: 54 45 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74  TE: Used to test
4550: 20 74 68 65 20 49 4e 53 45 52 54 20 66 69 78 20   the INSERT fix 
4560: 28 69 2e 65 2e 20 61 6e 20 65 78 74 72 61 20 73  (i.e. an extra s
4570: 65 6d 69 2d 63 6f 6c 6f 6e 20 69 6e 0d 0a 20 20  emi-colon in..  
4580: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
4590: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61   SQL statement a
45a0: 66 74 65 72 20 74 68 65 20 61 63 74 75 61 6c 20  fter the actual 
45b0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
45c0: 20 69 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20   in..      //   
45d0: 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 2d 75      the follow-u
45e0: 70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  p SELECT stateme
45f0: 6e 74 29 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  nt)...      //..
4600: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
4610: 61 74 69 63 20 69 6e 74 20 49 6e 73 65 72 74 54  atic int InsertT
4620: 65 73 74 28 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  est()..      {..
4630: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
4640: 28 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69  (northwindEFEnti
4650: 74 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f  ties db = new no
4660: 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65  rthwindEFEntitie
4670: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s())..          
4680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4690: 20 6c 6f 6e 67 20 6f 72 64 65 72 49 64 20 3d 20   long orderId = 
46a0: 31 30 32 34 38 3b 0d 0a 20 20 20 20 20 20 20 20  10248;..        
46b0: 20 20 20 20 20 20 6c 6f 6e 67 20 70 72 6f 64 75        long produ
46c0: 63 74 49 64 20 3d 20 31 3b 0d 0a 20 20 20 20 20  ctId = 1;..     
46d0: 20 20 20 20 20 20 20 20 20 69 6e 74 5b 5d 20 63           int[] c
46e0: 6f 75 6e 74 73 20 3d 20 7b 20 30 20 7d 3b 0d 0a  ounts = { 0 };..
46f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4700: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4710: 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 52 45 51 55    // NOTE: *REQU
4720: 49 52 45 44 2a 20 54 68 69 73 20 69 73 20 72 65  IRED* This is re
4730: 71 75 69 72 65 64 20 73 6f 20 74 68 61 74 20 74  quired so that t
4740: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
4750: 20 20 2f 2f 20 20 20 20 20 20 20 45 6e 74 69 74    //       Entit
4760: 79 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 70  y Framework is p
4770: 72 65 76 65 6e 74 65 64 20 66 72 6f 6d 20 6f 70  revented from op
4780: 65 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  ening..         
4790: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 75       //       mu
47a0: 6c 74 69 70 6c 65 20 63 6f 6e 6e 65 63 74 69 6f  ltiple connectio
47b0: 6e 73 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ns to the underl
47c0: 79 69 6e 67 20 53 51 4c 69 74 65 0d 0a 20 20 20  ying SQLite..   
47d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
47e0: 20 20 20 20 64 61 74 61 62 61 73 65 20 28 69 2e      database (i.
47f0: 65 2e 20 77 68 69 63 68 20 77 6f 75 6c 64 20 72  e. which would r
4800: 65 73 75 6c 74 20 69 6e 20 6d 75 6c 74 69 70 6c  esult in multipl
4810: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
4820: 20 2f 2f 20 20 20 20 20 20 20 49 4d 4d 45 44 49   //       IMMEDI
4830: 41 54 45 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ATE transactions
4840: 2c 20 74 68 65 72 65 62 79 20 66 61 69 6c 69 6e  , thereby failin
4850: 67 20 5b 6c 61 74 65 72 0d 0a 20 20 20 20 20 20  g [later..      
4860: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
4870: 20 6f 6e 5d 20 77 69 74 68 20 6c 6f 63 6b 69 6e   on] with lockin
4880: 67 20 65 72 72 6f 72 73 29 2e 0d 0a 20 20 20 20  g errors)...    
4890: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 43              db.C
48b0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
48c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
48d0: 20 20 20 4b 65 79 56 61 6c 75 65 50 61 69 72 3c     KeyValuePair<
48e0: 73 74 72 69 6e 67 2c 20 6f 62 6a 65 63 74 3e 20  string, object> 
48f0: 6f 72 64 65 72 49 64 50 61 69 72 20 3d 0d 0a 20  orderIdPair =.. 
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 6e 65 77 20 4b 65 79 56 61 6c 75 65 50 61 69   new KeyValuePai
4920: 72 3c 73 74 72 69 6e 67 2c 20 6f 62 6a 65 63 74  r<string, object
4930: 3e 28 22 4f 72 64 65 72 49 44 22 2c 20 6f 72 64  >("OrderID", ord
4940: 65 72 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  erId);....      
4950: 20 20 20 20 20 20 20 20 4b 65 79 56 61 6c 75 65          KeyValue
4960: 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 6f 62 6a  Pair<string, obj
4970: 65 63 74 3e 20 70 72 6f 64 75 63 74 49 64 50 61  ect> productIdPa
4980: 69 72 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ir =..          
4990: 20 20 20 20 20 20 20 20 6e 65 77 20 4b 65 79 56          new KeyV
49a0: 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c  aluePair<string,
49b0: 20 6f 62 6a 65 63 74 3e 28 22 50 72 6f 64 75 63   object>("Produc
49c0: 74 49 44 22 2c 20 70 72 6f 64 75 63 74 49 64 29  tID", productId)
49d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
49e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
49f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4a30: 20 20 20 20 20 20 4f 72 64 65 72 44 65 74 61 69        OrderDetai
4a40: 6c 73 20 6e 65 77 4f 72 64 65 72 44 65 74 61 69  ls newOrderDetai
4a50: 6c 73 20 3d 20 6e 65 77 20 4f 72 64 65 72 44 65  ls = new OrderDe
4a60: 74 61 69 6c 73 28 29 3b 0d 0a 0d 0a 20 20 20 20  tails();....    
4a70: 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f 72 64            newOrd
4a80: 65 72 44 65 74 61 69 6c 73 2e 4f 72 64 65 72 49  erDetails.OrderI
4a90: 44 20 3d 20 6f 72 64 65 72 49 64 3b 0d 0a 20 20  D = orderId;..  
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f              newO
4ab0: 72 64 65 72 44 65 74 61 69 6c 73 2e 50 72 6f 64  rderDetails.Prod
4ac0: 75 63 74 49 44 20 3d 20 70 72 6f 64 75 63 74 49  uctID = productI
4ad0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
4ae0: 20 20 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c    newOrderDetail
4af0: 73 2e 55 6e 69 74 50 72 69 63 65 20 3d 20 28 64  s.UnitPrice = (d
4b00: 65 63 69 6d 61 6c 29 31 2e 32 33 3b 0d 0a 20 20  ecimal)1.23;..  
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f              newO
4b20: 72 64 65 72 44 65 74 61 69 6c 73 2e 51 75 61 6e  rderDetails.Quan
4b30: 74 69 74 79 20 3d 20 31 3b 0d 0a 20 20 20 20 20  tity = 1;..     
4b40: 20 20 20 20 20 20 20 20 20 6e 65 77 4f 72 64 65           newOrde
4b50: 72 44 65 74 61 69 6c 73 2e 44 69 73 63 6f 75 6e  rDetails.Discoun
4b60: 74 20 3d 20 30 2e 30 66 3b 0d 0a 0d 0a 20 20 20  t = 0.0f;....   
4b70: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f 72             newOr
4b80: 64 65 72 44 65 74 61 69 6c 73 2e 4f 72 64 65 72  derDetails.Order
4b90: 73 52 65 66 65 72 65 6e 63 65 2e 45 6e 74 69 74  sReference.Entit
4ba0: 79 4b 65 79 20 3d 20 6e 65 77 20 45 6e 74 69 74  yKey = new Entit
4bb0: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
4bc0: 20 20 20 20 20 20 20 20 20 22 6e 6f 72 74 68 77           "northw
4bd0: 69 6e 64 45 46 45 6e 74 69 74 69 65 73 2e 4f 72  indEFEntities.Or
4be0: 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ders",..        
4bf0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4b 65            new Ke
4c00: 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e  yValuePair<strin
4c10: 67 2c 20 6f 62 6a 65 63 74 3e 5b 5d 20 7b 20 6f  g, object>[] { o
4c20: 72 64 65 72 49 64 50 61 69 72 20 7d 29 3b 0d 0a  rderIdPair });..
4c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c40: 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e  newOrderDetails.
4c50: 50 72 6f 64 75 63 74 73 52 65 66 65 72 65 6e 63  ProductsReferenc
4c60: 65 2e 45 6e 74 69 74 79 4b 65 79 20 3d 20 6e 65  e.EntityKey = ne
4c70: 77 20 45 6e 74 69 74 79 4b 65 79 28 0d 0a 20 20  w EntityKey(..  
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c90: 22 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69  "northwindEFEnti
4ca0: 74 69 65 73 2e 50 72 6f 64 75 63 74 73 22 2c 0d  ties.Products",.
4cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4cc0: 20 20 20 6e 65 77 20 4b 65 79 56 61 6c 75 65 50     new KeyValueP
4cd0: 61 69 72 3c 73 74 72 69 6e 67 2c 20 6f 62 6a 65  air<string, obje
4ce0: 63 74 3e 5b 5d 20 7b 20 70 72 6f 64 75 63 74 49  ct>[] { productI
4cf0: 64 50 61 69 72 20 7d 29 3b 0d 0a 0d 0a 20 20 20  dPair });....   
4d00: 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 41 64             db.Ad
4d10: 64 4f 62 6a 65 63 74 28 22 4f 72 64 65 72 44 65  dObject("OrderDe
4d20: 74 61 69 6c 73 22 2c 20 6e 65 77 4f 72 64 65 72  tails", newOrder
4d30: 44 65 74 61 69 6c 73 29 3b 0d 0a 0d 0a 20 20 20  Details);....   
4d40: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
4d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d70: 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e 67 65     db.SaveChange
4d80: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
4d90: 20 20 20 20 20 20 20 20 63 6f 75 6e 74 73 5b 30          counts[0
4da0: 5d 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ]++;..          
4db0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4dc0: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
4dd0: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
4de0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
4e00: 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 65  sole.WriteLine(e
4e10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4e20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4e30: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
4e40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
4e60: 62 2e 41 63 63 65 70 74 41 6c 6c 43 68 61 6e 67  b.AcceptAllChang
4e70: 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  es();..         
4e80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4e90: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
4ea0: 57 72 69 74 65 4c 69 6e 65 28 22 69 6e 73 65 72  WriteLine("inser
4eb0: 74 65 64 20 7b 30 7d 22 2c 20 63 6f 75 6e 74 73  ted {0}", counts
4ec0: 5b 30 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  [0]);..         
4ed0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4ee0: 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20  return 0;..     
4ef0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a   }....      //..
4f00: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55        // NOTE: U
4f10: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
4f20: 55 50 44 41 54 45 20 66 69 78 20 28 69 2e 65 2e  UPDATE fix (i.e.
4f30: 20 74 68 65 20 6d 69 73 73 69 6e 67 20 73 65 6d   the missing sem
4f40: 69 2d 63 6f 6c 6f 6e 0d 0a 20 20 20 20 20 20 2f  i-colon..      /
4f50: 2f 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 53  /       in the S
4f60: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 62 65 74  QL statement bet
4f70: 77 65 65 6e 20 74 68 65 20 61 63 74 75 61 6c 20  ween the actual 
4f80: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
4f90: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
4fa0: 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 2d   and the follow-
4fb0: 75 70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  up SELECT statem
4fc0: 65 6e 74 29 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d  ent)...      //.
4fd0: 0a 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73  .      private s
4fe0: 74 61 74 69 63 20 69 6e 74 20 55 70 64 61 74 65  tatic int Update
4ff0: 54 65 73 74 28 29 0d 0a 20 20 20 20 20 20 7b 0d  Test()..      {.
5000: 0a 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 5b  .          long[
5010: 5d 20 6f 72 64 65 72 49 64 73 20 3d 20 6e 65 77  ] orderIds = new
5020: 20 6c 6f 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20   long[] {..     
5030: 20 20 20 20 20 20 20 20 20 30 0d 0a 20 20 20 20           0..    
5040: 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20        };....    
5050: 20 20 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72        using (nor
5060: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
5070: 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77   db = new northw
5080: 69 6e 64 45 46 45 6e 74 69 74 69 65 73 28 29 29  indEFEntities())
5090: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
50a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
50b0: 5b 5d 20 63 6f 75 6e 74 73 20 3d 20 7b 20 30 2c  [] counts = { 0,
50c0: 20 30 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   0 };....       
50d0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
50e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
50f0: 3a 20 2a 52 45 51 55 49 52 45 44 2a 20 54 68 69  : *REQUIRED* Thi
5100: 73 20 69 73 20 72 65 71 75 69 72 65 64 20 73 6f  s is required so
5110: 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20   that the..     
5120: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5130: 20 20 45 6e 74 69 74 79 20 46 72 61 6d 65 77 6f    Entity Framewo
5140: 72 6b 20 69 73 20 70 72 65 76 65 6e 74 65 64 20  rk is prevented 
5150: 66 72 6f 6d 20 6f 70 65 6e 69 6e 67 0d 0a 20 20  from opening..  
5160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5170: 20 20 20 20 20 6d 75 6c 74 69 70 6c 65 20 63 6f       multiple co
5180: 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74 68 65  nnections to the
5190: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
51a0: 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  te..            
51b0: 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 62    //       datab
51c0: 61 73 65 20 28 69 2e 65 2e 20 77 68 69 63 68 20  ase (i.e. which 
51d0: 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20  would result in 
51e0: 6d 75 6c 74 69 70 6c 65 0d 0a 20 20 20 20 20 20  multiple..      
51f0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
5200: 20 49 4d 4d 45 44 49 41 54 45 20 74 72 61 6e 73   IMMEDIATE trans
5210: 61 63 74 69 6f 6e 73 2c 20 74 68 65 72 65 62 79  actions, thereby
5220: 20 66 61 69 6c 69 6e 67 20 5b 6c 61 74 65 72 0d   failing [later.
5230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
5240: 2f 20 20 20 20 20 20 20 6f 6e 5d 20 77 69 74 68  /       on] with
5250: 20 6c 6f 63 6b 69 6e 67 20 65 72 72 6f 72 73 29   locking errors)
5260: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5270: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5280: 20 20 20 64 62 2e 43 6f 6e 6e 65 63 74 69 6f 6e     db.Connection
5290: 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  .Open();....    
52a0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
52b0: 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
52c0: 64 65 78 20 3c 20 6f 72 64 65 72 49 64 73 2e 4c  dex < orderIds.L
52d0: 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
52e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
52f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5300: 20 20 20 20 4f 72 64 65 72 73 20 6e 65 77 4f 72      Orders newOr
5310: 64 65 72 73 20 3d 20 6e 65 77 20 4f 72 64 65 72  ders = new Order
5320: 73 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s();....        
5330: 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f 72 64            newOrd
5340: 65 72 73 2e 53 68 69 70 41 64 64 72 65 73 73 20  ers.ShipAddress 
5350: 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
5360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5370: 20 20 20 20 20 20 20 20 22 54 65 73 74 20 4f 72          "Test Or
5380: 64 65 72 20 53 68 69 70 20 41 64 64 72 65 73 73  der Ship Address
5390: 2c 20 49 6e 64 65 78 20 23 7b 30 7d 22 2c 0d 0a  , Index #{0}",..
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 20 20 20 20 20 20 69 6e 64 65 78 29 3b 0d 0a 0d        index);...
53c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
53d0: 20 20 20 64 62 2e 41 64 64 4f 62 6a 65 63 74 28     db.AddObject(
53e0: 22 4f 72 64 65 72 73 22 2c 20 6e 65 77 4f 72 64  "Orders", newOrd
53f0: 65 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ers);....       
5400: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
5410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5420: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5430: 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 53 61             db.Sa
5440: 76 65 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20  veChanges();..  
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 20 20 20 20 63 6f 75 6e 74 73 5b 30 5d 2b 2b 3b      counts[0]++;
5470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5480: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53 74 6f            // Sto
5490: 72 65 47 65 6e 65 72 61 74 65 64 50 61 74 74 65  reGeneratedPatte
54a0: 72 6e 3d 22 49 64 65 6e 74 69 74 79 22 0d 0a 20  rn="Identity".. 
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54c0: 20 20 20 20 20 6f 72 64 65 72 49 64 73 5b 69 6e       orderIds[in
54d0: 64 65 78 5d 20 3d 20 6e 65 77 4f 72 64 65 72 73  dex] = newOrders
54e0: 2e 4f 72 64 65 72 49 44 3b 0d 0a 0d 0a 20 20 20  .OrderID;....   
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5500: 20 20 20 2f 2f 20 53 74 6f 72 65 47 65 6e 65 72     // StoreGener
5510: 61 74 65 64 50 61 74 74 65 72 6e 3d 22 4e 6f 6e  atedPattern="Non
5520: 65 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e"..            
5530: 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f 72 64            newOrd
5540: 65 72 73 2e 53 68 69 70 41 64 64 72 65 73 73 20  ers.ShipAddress 
5550: 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
5560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5570: 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 65 77              "New
5580: 20 4f 72 64 65 72 20 53 68 69 70 20 41 64 64 72   Order Ship Addr
5590: 65 73 73 20 23 7b 30 7d 22 2c 0d 0a 20 20 20 20  ess #{0}",..    
55a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55b0: 20 20 20 20 20 20 6f 72 64 65 72 49 64 73 5b 69        orderIds[i
55c0: 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndex]);....     
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55e0: 20 2f 2f 20 53 74 6f 72 65 47 65 6e 65 72 61 74   // StoreGenerat
55f0: 65 64 50 61 74 74 65 72 6e 3d 22 43 6f 6d 70 75  edPattern="Compu
5600: 74 65 64 22 0d 0a 20 20 20 20 20 20 20 20 20 20  ted"..          
5610: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f              newO
5620: 72 64 65 72 73 2e 46 72 65 69 67 68 74 20 3d 20  rders.Freight = 
5630: 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  1;....          
5640: 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 53              db.S
5650: 61 76 65 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20  aveChanges();.. 
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5670: 20 20 20 20 20 63 6f 75 6e 74 73 5b 31 5d 2b 2b       counts[1]++
5680: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5690: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
56a0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
56b0: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
56e0: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
56f0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 65 29 3b 0d  e.WriteLine(e);.
5700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5710: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5720: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
5730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5740: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5750: 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2e 41              db.A
5760: 63 63 65 70 74 41 6c 6c 43 68 61 6e 67 65 73 28  cceptAllChanges(
5770: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5780: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5790: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
57a0: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
57b0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20  e.WriteLine(..  
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57d0: 22 69 6e 73 65 72 74 65 64 20 7b 30 7d 20 75 70  "inserted {0} up
57e0: 64 61 74 65 64 20 7b 31 7d 22 2c 20 63 6f 75 6e  dated {1}", coun
57f0: 74 73 5b 30 5d 2c 20 63 6f 75 6e 74 73 5b 31 5d  ts[0], counts[1]
5800: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
5810: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
5820: 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d  urn 0;..      }.
5830: 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
5840: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 64     // NOTE: Used
5850: 20 74 6f 20 74 65 73 74 20 74 68 65 20 42 69 6e   to test the Bin
5860: 61 72 79 47 55 49 44 20 66 69 78 20 28 69 2e 65  aryGUID fix (i.e
5870: 2e 20 42 4c 4f 42 20 6c 69 74 65 72 61 6c 20 66  . BLOB literal f
5880: 6f 72 6d 61 74 74 69 6e 67 0d 0a 20 20 20 20 20  ormatting..     
5890: 20 2f 2f 20 20 20 20 20 20 20 6f 66 20 47 55 49   //       of GUI
58a0: 44 20 76 61 6c 75 65 73 20 77 68 65 6e 20 74 68  D values when th
58b0: 65 20 42 69 6e 61 72 79 47 55 49 44 20 63 6f 6e  e BinaryGUID con
58c0: 6e 65 63 74 69 6f 6e 20 70 72 6f 70 65 72 74 79  nection property
58d0: 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20   has been..     
58e0: 20 2f 2f 20 20 20 20 20 20 20 65 6e 61 62 6c 65   //       enable
58f0: 64 29 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  d)...      //.. 
5900: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
5910: 74 69 63 20 69 6e 74 20 42 69 6e 61 72 79 47 75  tic int BinaryGu
5920: 69 64 54 65 73 74 28 62 6f 6f 6c 20 62 69 6e 61  idTest(bool bina
5930: 72 79 47 75 69 64 29 0d 0a 20 20 20 20 20 20 7b  ryGuid)..      {
5940: 0d 0a 20 20 20 20 20 20 20 20 20 20 45 6e 76 69  ..          Envi
5950: 72 6f 6e 6d 65 6e 74 2e 53 65 74 45 6e 76 69 72  ronment.SetEnvir
5960: 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 0d  onmentVariable(.
5970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
5980: 41 70 70 65 6e 64 4d 61 6e 69 66 65 73 74 54 6f  AppendManifestTo
5990: 6b 65 6e 5f 53 51 4c 69 74 65 50 72 6f 76 69 64  ken_SQLiteProvid
59a0: 65 72 4d 61 6e 69 66 65 73 74 22 2c 0d 0a 20 20  erManifest",..  
59b0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
59c0: 6e 67 2e 46 6f 72 6d 61 74 28 22 3b 42 69 6e 61  ng.Format(";Bina
59d0: 72 79 47 55 49 44 3d 7b 30 7d 3b 22 2c 20 62 69  ryGUID={0};", bi
59e0: 6e 61 72 79 47 75 69 64 29 29 3b 0d 0a 0d 0a 20  naryGuid));.... 
59f0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
5a00: 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74  northwindEFEntit
5a10: 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72  ies db = new nor
5a20: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
5a30: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ())..          {
5a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a50: 73 74 72 69 6e 67 20 73 71 6c 20 3d 20 22 53 45  string sql = "SE
5a60: 4c 45 43 54 20 56 41 4c 55 45 20 47 55 49 44 20  LECT VALUE GUID 
5a70: 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
5a80: 20 20 20 20 20 20 20 22 27 32 64 33 64 32 64 33         "'2d3d2d3
5a90: 64 2d 32 64 33 64 2d 32 64 33 64 2d 32 64 33 64  d-2d3d-2d3d-2d3d
5aa0: 2d 32 64 33 64 32 64 33 64 32 64 33 64 27 20 22  -2d3d2d3d2d3d' "
5ab0: 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
5ac0: 20 20 20 20 20 20 22 46 52 4f 4d 20 4f 72 64 65        "FROM Orde
5ad0: 72 73 20 41 53 20 6f 20 57 48 45 52 45 20 6f 2e  rs AS o WHERE o.
5ae0: 4f 72 64 65 72 49 44 20 3d 20 31 30 32 34 38 3b  OrderID = 10248;
5af0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
5b00: 20 20 20 20 4f 62 6a 65 63 74 51 75 65 72 79 3c      ObjectQuery<
5b10: 73 74 72 69 6e 67 3e 20 71 75 65 72 79 20 3d 20  string> query = 
5b20: 64 62 2e 43 72 65 61 74 65 51 75 65 72 79 3c 73  db.CreateQuery<s
5b30: 74 72 69 6e 67 3e 28 73 71 6c 29 3b 0d 0a 0d 0a  tring>(sql);....
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
5b50: 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 73 20  reach (string s 
5b60: 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20  in query)..     
5b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
5b80: 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 73  sole.WriteLine(s
5b90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
5ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 45 6e 76  ...          Env
5bb0: 69 72 6f 6e 6d 65 6e 74 2e 53 65 74 45 6e 76 69  ironment.SetEnvi
5bc0: 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28  ronmentVariable(
5bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5be0: 22 41 70 70 65 6e 64 4d 61 6e 69 66 65 73 74 54  "AppendManifestT
5bf0: 6f 6b 65 6e 5f 53 51 4c 69 74 65 50 72 6f 76 69  oken_SQLiteProvi
5c00: 64 65 72 4d 61 6e 69 66 65 73 74 22 2c 0d 0a 20  derManifest",.. 
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
5c20: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
5c30: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20   return 0;..    
5c40: 20 20 7d 0d 0a 0d 0a 23 69 66 20 4e 45 54 5f 34    }....#if NET_4
5c50: 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e  0 || NET_45 || N
5c60: 45 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35  ET_451 || NET_45
5c70: 32 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e  2 || NET_46 || N
5c80: 45 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36  ET_461 || NET_46
5c90: 32 20 7c 7c 20 4e 45 54 5f 34 37 0d 0a 20 20 20  2 || NET_47..   
5ca0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20     //..      // 
5cb0: 4e 4f 54 45 3a 20 55 73 65 64 20 74 6f 20 74 65  NOTE: Used to te
5cc0: 73 74 20 74 68 65 20 42 69 6e 61 72 79 47 55 49  st the BinaryGUI
5cd0: 44 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  D connection str
5ce0: 69 6e 67 20 70 72 6f 70 65 72 74 79 20 77 69 74  ing property wit
5cf0: 68 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  h..      //     
5d00: 20 20 74 68 65 20 43 6f 6e 74 61 69 6e 73 28 29    the Contains()
5d10: 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 63 6b 65   function (ticke
5d20: 74 20 5b 61 34 64 39 63 37 65 65 39 34 5d 29 2e  t [a4d9c7ee94]).
5d30: 20 20 57 65 20 63 61 6e 6e 6f 74 0d 0a 20 20 20    We cannot..   
5d40: 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 20     //       use 
5d50: 74 68 65 20 43 6f 6e 74 61 69 6e 73 20 65 78 74  the Contains ext
5d60: 65 6e 73 69 6f 6e 20 6d 65 74 68 6f 64 20 77 69  ension method wi
5d70: 74 68 69 6e 20 61 20 4c 49 4e 51 20 71 75 65 72  thin a LINQ quer
5d80: 79 20 77 69 74 68 0d 0a 20 20 20 20 20 20 2f 2f  y with..      //
5d90: 20 20 20 20 20 20 20 74 68 65 20 2e 4e 45 54 20         the .NET 
5da0: 46 72 61 6d 65 77 6f 72 6b 20 33 2e 35 2e 0d 0a  Framework 3.5...
5db0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5dc0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
5dd0: 6e 74 20 42 69 6e 61 72 79 47 75 69 64 54 65 73  nt BinaryGuidTes
5de0: 74 32 28 62 6f 6f 6c 20 62 69 6e 61 72 79 47 75  t2(bool binaryGu
5df0: 69 64 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id)..      {..  
5e00: 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d          Environm
5e10: 65 6e 74 2e 53 65 74 45 6e 76 69 72 6f 6e 6d 65  ent.SetEnvironme
5e20: 6e 74 56 61 72 69 61 62 6c 65 28 0d 0a 20 20 20  ntVariable(..   
5e30: 20 20 20 20 20 20 20 20 20 20 20 22 41 70 70 65             "Appe
5e40: 6e 64 4d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 5f  ndManifestToken_
5e50: 53 51 4c 69 74 65 50 72 6f 76 69 64 65 72 4d 61  SQLiteProviderMa
5e60: 6e 69 66 65 73 74 22 2c 0d 0a 20 20 20 20 20 20  nifest",..      
5e70: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
5e80: 6f 72 6d 61 74 28 22 3b 42 69 6e 61 72 79 47 55  ormat(";BinaryGU
5e90: 49 44 3d 7b 30 7d 3b 22 2c 20 62 69 6e 61 72 79  ID={0};", binary
5ea0: 47 75 69 64 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Guid));....     
5eb0: 20 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72 74       using (nort
5ec0: 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 20  hwindEFEntities 
5ed0: 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69  db = new northwi
5ee0: 6e 64 45 46 45 6e 74 69 74 69 65 73 28 29 29 0d  ndEFEntities()).
5ef0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69 64              Guid
5f10: 20 67 75 69 64 20 3d 20 6e 65 77 20 47 75 69 64   guid = new Guid
5f20: 28 22 32 64 33 64 32 64 33 64 2d 32 64 33 64 2d  ("2d3d2d3d-2d3d-
5f30: 32 64 33 64 2d 32 64 33 64 2d 32 64 33 64 32 64  2d3d-2d3d-2d3d2d
5f40: 33 64 32 64 33 64 22 29 3b 0d 0a 20 20 20 20 20  3d2d3d");..     
5f50: 20 20 20 20 20 20 20 20 20 47 75 69 64 5b 5d 20           Guid[] 
5f60: 67 75 69 64 73 20 3d 20 6e 65 77 20 47 75 69 64  guids = new Guid
5f70: 5b 5d 20 7b 20 67 75 69 64 20 7d 3b 0d 0a 0d 0a  [] { guid };....
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
5f90: 6f 6c 20 6f 6e 63 65 20 3d 20 66 61 6c 73 65 3b  ol once = false;
5fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5fb0: 76 61 72 20 71 75 65 72 79 20 3d 20 66 72 6f 6d  var query = from
5fc0: 20 74 20 69 6e 20 64 62 2e 54 65 72 72 69 74 6f   t in db.Territo
5fd0: 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ries..          
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ff0: 77 68 65 72 65 20 67 75 69 64 73 2e 41 73 51 75  where guids.AsQu
6000: 65 72 79 61 62 6c 65 3c 47 75 69 64 3e 28 29 2e  eryable<Guid>().
6010: 43 6f 6e 74 61 69 6e 73 3c 47 75 69 64 3e 28 67  Contains<Guid>(g
6020: 75 69 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  uid)..          
6030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6040: 6f 72 64 65 72 62 79 20 74 2e 54 65 72 72 69 74  orderby t.Territ
6050: 6f 72 79 49 44 0d 0a 20 20 20 20 20 20 20 20 20  oryID..         
6060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6070: 20 73 65 6c 65 63 74 20 74 3b 0d 0a 0d 0a 20 20   select t;....  
6080: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
6090: 61 63 68 20 28 54 65 72 72 69 74 6f 72 69 65 73  ach (Territories
60a0: 20 74 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20   t in query)..  
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
60c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60d0: 20 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20   if (once)..    
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60f0: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28    Console.Write(
6100: 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ' ');....       
6110: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
6120: 6c 65 2e 57 72 69 74 65 28 74 2e 54 65 72 72 69  le.Write(t.Terri
6130: 74 6f 72 79 49 44 29 3b 0d 0a 0d 0a 20 20 20 20  toryID);....    
6140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e                on
6150: 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ce = true;..    
6160: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6170: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6180: 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
6190: 74 2e 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74  t.SetEnvironment
61a0: 56 61 72 69 61 62 6c 65 28 0d 0a 20 20 20 20 20  Variable(..     
61b0: 20 20 20 20 20 20 20 20 20 22 41 70 70 65 6e 64           "Append
61c0: 4d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 5f 53 51  ManifestToken_SQ
61d0: 4c 69 74 65 50 72 6f 76 69 64 65 72 4d 61 6e 69  LiteProviderMani
61e0: 66 65 73 74 22 2c 0d 0a 20 20 20 20 20 20 20 20  fest",..        
61f0: 20 20 20 20 20 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a        null);....
6200: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6210: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 65   0;..      }..#e
6220: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 70 72  ndif....      pr
6230: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
6240: 20 43 6f 6d 70 6c 65 78 50 72 69 6d 61 72 79 4b   ComplexPrimaryK
6250: 65 79 54 65 73 74 28 29 0d 0a 20 20 20 20 20 20  eyTest()..      
6260: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  {..          usi
6270: 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46 45  ng (northwindEFE
6280: 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65 77  ntities db = new
6290: 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69   northwindEFEnti
62a0: 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20 20  ties())..       
62b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
62c0: 20 20 20 20 6c 6f 6e 67 20 6f 72 64 65 72 49 64      long orderId
62d0: 20 3d 20 31 30 32 34 38 3b 0d 0a 20 20 20 20 20   = 10248;..     
62e0: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 70 72           long pr
62f0: 6f 64 75 63 74 49 64 20 3d 20 31 3b 0d 0a 20 20  oductId = 1;..  
6300: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 5b              int[
6310: 5d 20 63 6f 75 6e 74 73 20 3d 20 7b 20 30 2c 20  ] counts = { 0, 
6320: 30 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  0 };....        
6330: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
6340: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
6350: 20 2a 52 45 51 55 49 52 45 44 2a 20 54 68 69 73   *REQUIRED* This
6360: 20 69 73 20 72 65 71 75 69 72 65 64 20 73 6f 20   is required so 
6370: 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20  that the..      
6380: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
6390: 20 45 6e 74 69 74 79 20 46 72 61 6d 65 77 6f 72   Entity Framewor
63a0: 6b 20 69 73 20 70 72 65 76 65 6e 74 65 64 20 66  k is prevented f
63b0: 72 6f 6d 20 6f 70 65 6e 69 6e 67 0d 0a 20 20 20  rom opening..   
63c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
63d0: 20 20 20 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e      multiple con
63e0: 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74 68 65 20  nections to the 
63f0: 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74  underlying SQLit
6400: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
6410: 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 62 61   //       databa
6420: 73 65 20 28 69 2e 65 2e 20 77 68 69 63 68 20 77  se (i.e. which w
6430: 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 6d  ould result in m
6440: 75 6c 74 69 70 6c 65 0d 0a 20 20 20 20 20 20 20  ultiple..       
6450: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
6460: 49 4d 4d 45 44 49 41 54 45 20 74 72 61 6e 73 61  IMMEDIATE transa
6470: 63 74 69 6f 6e 73 2c 20 74 68 65 72 65 62 79 20  ctions, thereby 
6480: 66 61 69 6c 69 6e 67 20 5b 6c 61 74 65 72 0d 0a  failing [later..
6490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
64a0: 20 20 20 20 20 20 20 6f 6e 5d 20 77 69 74 68 20         on] with 
64b0: 6c 6f 63 6b 69 6e 67 20 65 72 72 6f 72 73 29 2e  locking errors).
64c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
64d0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
64e0: 20 20 64 62 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e    db.Connection.
64f0: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
6500: 20 20 20 20 20 20 20 20 20 4b 65 79 56 61 6c 75           KeyValu
6510: 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 6f 62  ePair<string, ob
6520: 6a 65 63 74 3e 20 6f 72 64 65 72 49 64 50 61 69  ject> orderIdPai
6530: 72 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r =..           
6540: 20 20 20 20 20 20 20 6e 65 77 20 4b 65 79 56 61         new KeyVa
6550: 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  luePair<string, 
6560: 6f 62 6a 65 63 74 3e 28 22 4f 72 64 65 72 49 44  object>("OrderID
6570: 22 2c 20 6f 72 64 65 72 49 64 29 3b 0d 0a 0d 0a  ", orderId);....
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4b 65                Ke
6590: 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e  yValuePair<strin
65a0: 67 2c 20 6f 62 6a 65 63 74 3e 20 70 72 6f 64 75  g, object> produ
65b0: 63 74 49 64 50 61 69 72 20 3d 0d 0a 20 20 20 20  ctIdPair =..    
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
65d0: 77 20 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73  w KeyValuePair<s
65e0: 74 72 69 6e 67 2c 20 6f 62 6a 65 63 74 3e 28 22  tring, object>("
65f0: 50 72 6f 64 75 63 74 49 44 22 2c 20 70 72 6f 64  ProductID", prod
6600: 75 63 74 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20  uctId);....     
6610: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6660: 20 20 20 20 20 20 20 20 20 20 20 20 4f 72 64 65              Orde
6670: 72 44 65 74 61 69 6c 73 20 6e 65 77 4f 72 64 65  rDetails newOrde
6680: 72 44 65 74 61 69 6c 73 20 3d 20 6e 65 77 20 4f  rDetails = new O
6690: 72 64 65 72 44 65 74 61 69 6c 73 28 29 3b 0d 0a  rderDetails();..
66a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66b0: 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e  newOrderDetails.
66c0: 4f 72 64 65 72 49 44 20 3d 20 6f 72 64 65 72 49  OrderID = orderI
66d0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
66e0: 20 20 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c    newOrderDetail
66f0: 73 2e 50 72 6f 64 75 63 74 49 44 20 3d 20 70 72  s.ProductID = pr
6700: 6f 64 75 63 74 49 64 3b 0d 0a 20 20 20 20 20 20  oductId;..      
6710: 20 20 20 20 20 20 20 20 6e 65 77 4f 72 64 65 72          newOrder
6720: 44 65 74 61 69 6c 73 2e 55 6e 69 74 50 72 69 63  Details.UnitPric
6730: 65 20 3d 20 28 64 65 63 69 6d 61 6c 29 31 2e 32  e = (decimal)1.2
6740: 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3;..            
6750: 20 20 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c    newOrderDetail
6760: 73 2e 51 75 61 6e 74 69 74 79 20 3d 20 31 3b 0d  s.Quantity = 1;.
6770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
6780: 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 44  ewOrderDetails.D
6790: 69 73 63 6f 75 6e 74 20 3d 20 30 2e 30 66 3b 0d  iscount = 0.0f;.
67a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
67b0: 20 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73   newOrderDetails
67c0: 2e 4f 72 64 65 72 73 52 65 66 65 72 65 6e 63 65  .OrdersReference
67d0: 2e 45 6e 74 69 74 79 4b 65 79 20 3d 20 6e 65 77  .EntityKey = new
67e0: 20 45 6e 74 69 74 79 4b 65 79 28 0d 0a 20 20 20   EntityKey(..   
67f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
6800: 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74  northwindEFEntit
6810: 69 65 73 2e 4f 72 64 65 72 73 22 2c 0d 0a 20 20  ies.Orders",..  
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 6e 65 77 20 4b 65 79 56 61 6c 75 65 50 61 69 72  new KeyValuePair
6840: 3c 73 74 72 69 6e 67 2c 20 6f 62 6a 65 63 74 3e  <string, object>
6850: 5b 5d 20 7b 20 6f 72 64 65 72 49 64 50 61 69 72  [] { orderIdPair
6860: 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   });....        
6870: 20 20 20 20 20 20 6e 65 77 4f 72 64 65 72 44 65        newOrderDe
6880: 74 61 69 6c 73 2e 50 72 6f 64 75 63 74 73 52 65  tails.ProductsRe
6890: 66 65 72 65 6e 63 65 2e 45 6e 74 69 74 79 4b 65  ference.EntityKe
68a0: 79 20 3d 20 6e 65 77 20 45 6e 74 69 74 79 4b 65  y = new EntityKe
68b0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
68c0: 20 20 20 20 20 20 22 6e 6f 72 74 68 77 69 6e 64        "northwind
68d0: 45 46 45 6e 74 69 74 69 65 73 2e 50 72 6f 64 75  EFEntities.Produ
68e0: 63 74 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  cts",..         
68f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4b 65 79           new Key
6900: 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67  ValuePair<string
6910: 2c 20 6f 62 6a 65 63 74 3e 5b 5d 20 7b 20 70 72  , object>[] { pr
6920: 6f 64 75 63 74 49 64 50 61 69 72 20 7d 29 3b 0d  oductIdPair });.
6930: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6940: 20 64 62 2e 41 64 64 4f 62 6a 65 63 74 28 22 4f   db.AddObject("O
6950: 72 64 65 72 44 65 74 61 69 6c 73 22 2c 20 6e 65  rderDetails", ne
6960: 77 4f 72 64 65 72 44 65 74 61 69 6c 73 29 3b 0d  wOrderDetails);.
6970: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6980: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
6990: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
69a0: 20 20 20 20 20 20 20 20 20 64 62 2e 53 61 76 65           db.Save
69b0: 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20  Changes();..    
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
69d0: 75 6e 74 73 5b 30 5d 2b 2b 3b 0d 0a 20 20 20 20  unts[0]++;..    
69e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
69f0: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
6a00: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6a20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a30: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
6a40: 4c 69 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20 20  Line(e);..      
6a50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6a60: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
6a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6a80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6a90: 20 20 20 20 20 64 62 2e 41 63 63 65 70 74 41 6c       db.AcceptAl
6aa0: 6c 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20  lChanges();..   
6ab0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
6ad0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
6ae0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6af0: 20 20 20 20 20 20 64 62 2e 52 65 66 72 65 73 68        db.Refresh
6b00: 28 52 65 66 72 65 73 68 4d 6f 64 65 2e 53 74 6f  (RefreshMode.Sto
6b10: 72 65 57 69 6e 73 2c 20 6e 65 77 4f 72 64 65 72  reWins, newOrder
6b20: 44 65 74 61 69 6c 73 29 3b 0d 0a 20 20 20 20 20  Details);..     
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 75               cou
6b40: 6e 74 73 5b 30 5d 2b 2b 3b 0d 0a 20 20 20 20 20  nts[0]++;..     
6b50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6b60: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
6b70: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ba0: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c    Console.WriteL
6bb0: 69 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20 20 20  ine(e);..       
6bc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6bd0: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
6be0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 22 69 6e 73  e.WriteLine("ins
6bf0: 65 72 74 65 64 20 7b 30 7d 22 2c 20 63 6f 75 6e  erted {0}", coun
6c00: 74 73 5b 30 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20  ts[0]);....     
6c10: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f              newO
6c70: 72 64 65 72 44 65 74 61 69 6c 73 2e 55 6e 69 74  rderDetails.Unit
6c80: 50 72 69 63 65 20 3d 20 28 64 65 63 69 6d 61 6c  Price = (decimal
6c90: 29 32 2e 33 34 3b 0d 0a 20 20 20 20 20 20 20 20  )2.34;..        
6ca0: 20 20 20 20 20 20 6e 65 77 4f 72 64 65 72 44 65        newOrderDe
6cb0: 74 61 69 6c 73 2e 51 75 61 6e 74 69 74 79 20 3d  tails.Quantity =
6cc0: 20 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   2;..           
6cd0: 20 20 20 6e 65 77 4f 72 64 65 72 44 65 74 61 69     newOrderDetai
6ce0: 6c 73 2e 44 69 73 63 6f 75 6e 74 20 3d 20 30 2e  ls.Discount = 0.
6cf0: 31 66 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  1f;....         
6d00: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
6d10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2e               db.
6d30: 53 61 76 65 43 68 61 6e 67 65 73 28 29 3b 0d 0a  SaveChanges();..
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d50: 20 20 63 6f 75 6e 74 73 5b 31 5d 2b 2b 3b 0d 0a    counts[1]++;..
6d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
6d80: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
6d90: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
6da0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6db0: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
6dc0: 72 69 74 65 4c 69 6e 65 28 65 29 3b 0d 0a 20 20  riteLine(e);..  
6dd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
6df0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
6e00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6e10: 20 20 20 20 20 20 20 20 20 64 62 2e 41 63 63 65           db.Acce
6e20: 70 74 41 6c 6c 43 68 61 6e 67 65 73 28 29 3b 0d  ptAllChanges();.
6e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
6e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6e50: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
6e60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6e70: 20 20 20 20 20 20 20 20 20 20 64 62 2e 52 65 66            db.Ref
6e80: 72 65 73 68 28 52 65 66 72 65 73 68 4d 6f 64 65  resh(RefreshMode
6e90: 2e 53 74 6f 72 65 57 69 6e 73 2c 20 6e 65 77 4f  .StoreWins, newO
6ea0: 72 64 65 72 44 65 74 61 69 6c 73 29 3b 0d 0a 20  rderDetails);.. 
6eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ec0: 20 63 6f 75 6e 74 73 5b 31 5d 2b 2b 3b 0d 0a 20   counts[1]++;.. 
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
6ef0: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
6f00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6f20: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
6f30: 69 74 65 4c 69 6e 65 28 65 29 3b 0d 0a 20 20 20  iteLine(e);..   
6f40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
6f60: 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
6f70: 22 75 70 64 61 74 65 64 20 7b 30 7d 22 2c 20 63  "updated {0}", c
6f80: 6f 75 6e 74 73 5b 31 5d 29 3b 0d 0a 20 20 20 20  ounts[1]);..    
6f90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6fa0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
6fb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6fc0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
6fd0: 69 6e 74 20 44 61 74 65 54 69 6d 65 54 65 73 74  int DateTimeTest
6fe0: 28 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ()..      {..   
6ff0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 6e 6f         using (no
7000: 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65  rthwindEFEntitie
7010: 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68  s db = new north
7020: 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 28 29  windEFEntities()
7030: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
7050: 74 65 54 69 6d 65 20 64 61 74 65 54 69 6d 65 20  teTime dateTime 
7060: 3d 20 6e 65 77 20 44 61 74 65 54 69 6d 65 28 31  = new DateTime(1
7070: 39 39 37 2c 20 31 2c 20 31 2c 20 30 2c 20 30 2c  997, 1, 1, 0, 0,
7080: 20 30 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   0, DateTimeKind
7090: 2e 4c 6f 63 61 6c 29 3b 0d 0a 20 20 20 20 20 20  .Local);..      
70a0: 20 20 20 20 20 20 20 20 69 6e 74 20 63 31 20 3d          int c1 =
70b0: 20 64 62 2e 4f 72 64 65 72 73 2e 57 68 65 72 65   db.Orders.Where
70c0: 28 69 20 3d 3e 20 69 2e 4f 72 64 65 72 44 61 74  (i => i.OrderDat
70d0: 65 20 3d 3d 20 6e 65 77 20 44 61 74 65 54 69 6d  e == new DateTim
70e0: 65 28 31 39 39 37 2c 20 31 2c 20 31 2c 20 30 2c  e(1997, 1, 1, 0,
70f0: 20 30 2c 20 30 2c 20 44 61 74 65 54 69 6d 65 4b   0, 0, DateTimeK
7100: 69 6e 64 2e 4c 6f 63 61 6c 29 29 2e 43 6f 75 6e  ind.Local)).Coun
7110: 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t();..          
7120: 20 20 20 20 69 6e 74 20 63 32 20 3d 20 64 62 2e      int c2 = db.
7130: 4f 72 64 65 72 73 2e 57 68 65 72 65 28 69 20 3d  Orders.Where(i =
7140: 3e 20 69 2e 4f 72 64 65 72 44 61 74 65 20 3d 3d  > i.OrderDate ==
7150: 20 64 61 74 65 54 69 6d 65 29 2e 43 6f 75 6e 74   dateTime).Count
7160: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7170: 20 20 20 72 65 74 75 72 6e 20 63 31 20 3d 3d 20     return c1 == 
7180: 63 32 20 3f 20 30 20 3a 20 31 3b 0d 0a 20 20 20  c2 ? 0 : 1;..   
7190: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
71a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 70 72 69 76 61  }....      priva
71b0: 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 44  te static void D
71c0: 61 74 65 54 69 6d 65 54 65 73 74 32 28 0d 0a 20  ateTimeTest2(.. 
71d0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
71e0: 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 0d 0a  dateTimeFormat..
71f0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
7200: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7210: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 20 6c 69  TraceListener li
7220: 73 74 65 6e 65 72 20 3d 20 6e 65 77 20 43 6f 6e  stener = new Con
7230: 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65  soleTraceListene
7240: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
7250: 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72    Trace.Listener
7260: 73 2e 41 64 64 28 6c 69 73 74 65 6e 65 72 29 3b  s.Add(listener);
7270: 0d 0a 20 20 20 20 20 20 20 20 20 20 45 6e 76 69  ..          Envi
7280: 72 6f 6e 6d 65 6e 74 2e 53 65 74 45 6e 76 69 72  ronment.SetEnvir
7290: 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22  onmentVariable("
72a0: 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50  SQLite_ForceLogP
72b0: 72 65 70 61 72 65 22 2c 20 22 31 22 29 3b 0d 0a  repare", "1");..
72c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
72d0: 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 21  dateTimeFormat !
72e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
72f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7300: 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e      Environment.
7310: 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  SetEnvironmentVa
7320: 72 69 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  riable(..       
7330: 20 20 20 20 20 20 20 20 20 20 20 22 41 70 70 65             "Appe
7340: 6e 64 4d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 5f  ndManifestToken_
7350: 53 51 4c 69 74 65 50 72 6f 76 69 64 65 72 4d 61  SQLiteProviderMa
7360: 6e 69 66 65 73 74 22 2c 0d 0a 20 20 20 20 20 20  nifest",..      
7370: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
7380: 6e 67 2e 46 6f 72 6d 61 74 28 22 3b 44 61 74 65  ng.Format(";Date
7390: 54 69 6d 65 46 6f 72 6d 61 74 3d 7b 30 7d 3b 22  TimeFormat={0};"
73a0: 2c 20 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  , dateTimeFormat
73b0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ));..          }
73c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73  ....          us
73d0: 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46  ing (northwindEF
73e0: 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65  Entities db = ne
73f0: 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74  w northwindEFEnt
7400: 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20  ities())..      
7410: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7420: 20 20 20 20 20 64 62 2e 4f 72 64 65 72 73 2e 57       db.Orders.W
7430: 68 65 72 65 28 69 20 3d 3e 20 69 2e 4f 72 64 65  here(i => i.Orde
7440: 72 44 61 74 65 20 3c 0d 0a 20 20 20 20 20 20 20  rDate <..       
7450: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 44             new D
7460: 61 74 65 54 69 6d 65 28 31 39 39 37 2c 20 31 2c  ateTime(1997, 1,
7470: 20 31 2c 20 30 2c 20 30 2c 20 30 2c 20 44 61 74   1, 0, 0, 0, Dat
7480: 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c 29  eTimeKind.Local)
7490: 29 2e 43 6f 75 6e 74 28 29 3b 0d 0a 20 20 20 20  ).Count();..    
74a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
74b0: 20 20 20 20 20 69 66 20 28 64 61 74 65 54 69 6d       if (dateTim
74c0: 65 46 6f 72 6d 61 74 20 21 3d 20 6e 75 6c 6c 29  eFormat != null)
74d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76               Env
74f0: 69 72 6f 6e 6d 65 6e 74 2e 53 65 74 45 6e 76 69  ironment.SetEnvi
7500: 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28  ronmentVariable(
7510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7520: 20 20 20 20 22 41 70 70 65 6e 64 4d 61 6e 69 66      "AppendManif
7530: 65 73 74 54 6f 6b 65 6e 5f 53 51 4c 69 74 65 50  estToken_SQLiteP
7540: 72 6f 76 69 64 65 72 4d 61 6e 69 66 65 73 74 22  roviderManifest"
7550: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
7560: 20 20 20 20 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20       null);..   
7570: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7580: 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
7590: 74 2e 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74  t.SetEnvironment
75a0: 56 61 72 69 61 62 6c 65 28 22 53 51 4c 69 74 65  Variable("SQLite
75b0: 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  _ForceLogPrepare
75c0: 22 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  ", null);..     
75d0: 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65       Trace.Liste
75e0: 6e 65 72 73 2e 52 65 6d 6f 76 65 28 6c 69 73 74  ners.Remove(list
75f0: 65 6e 65 72 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ener);..      }.
7600: 0a 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c  ...#if NET_40 ||
7610: 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34   NET_45 || NET_4
7620: 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c  51 || NET_452 ||
7630: 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34   NET_46 || NET_4
7640: 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32 20 7c 7c  61 || NET_462 ||
7650: 20 4e 45 54 5f 34 37 0d 0a 20 20 20 20 20 20 2f   NET_47..      /
7660: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
7670: 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74 20 74  : Used to test t
7680: 68 65 20 52 4f 55 4e 44 20 66 69 78 20 28 69 2e  he ROUND fix (i.
7690: 65 2e 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  e. being able to
76a0: 20 70 72 6f 70 65 72 6c 79 20 68 61 6e 64 6c 65   properly handle
76b0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
76c0: 20 74 68 65 20 74 77 6f 20 61 72 67 75 6d 65 6e   the two argumen
76d0: 74 20 66 6f 72 6d 29 2e 0d 0a 20 20 20 20 20 20  t form)...      
76e0: 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74  //..      privat
76f0: 65 20 73 74 61 74 69 63 20 69 6e 74 20 52 6f 75  e static int Rou
7700: 6e 64 54 65 73 74 28 29 0d 0a 20 20 20 20 20 20  ndTest()..      
7710: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  {..            u
7720: 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45  sing (northwindE
7730: 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e  FEntities db = n
7740: 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e  ew northwindEFEn
7750: 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20  tities())..     
7760: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7770: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f            bool o
7780: 6e 63 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  nce = false;....
7790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77a0: 66 6f 72 65 61 63 68 20 28 69 6e 74 5b 5d 20 69  foreach (int[] i
77b0: 20 69 6e 20 6e 65 77 20 69 6e 74 5b 5d 5b 5d 20   in new int[][] 
77c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
77d0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 69             new i
77e0: 6e 74 5b 5d 20 7b 20 31 30 35 30 33 2c 20 36 35  nt[] { 10503, 65
77f0: 20 7d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   },..           
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
7810: 20 69 6e 74 5b 5d 20 7b 20 31 30 35 30 33 2c 20   int[] { 10503, 
7820: 31 34 20 7d 2c 0d 0a 20 20 20 20 20 20 20 20 20  14 },..         
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
7840: 65 77 20 69 6e 74 5b 5d 20 7b 20 31 30 36 33 35  ew int[] { 10635
7850: 2c 20 35 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  , 5 }..         
7860: 20 20 20 20 20 20 20 20 20 20 20 7d 29 0d 0a 20             }).. 
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7890: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6a        for (int j
78a0: 20 3d 20 30 3b 20 6a 20 3c 20 33 3b 20 6a 2b 2b   = 0; j < 3; j++
78b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
78c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78e0: 20 20 69 6e 74 20 6f 69 64 20 3d 20 69 5b 30 5d    int oid = i[0]
78f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7900: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70             int p
7910: 69 64 20 3d 20 69 5b 31 5d 3b 0d 0a 0d 0a 20 20  id = i[1];....  
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 20 20 20 20 20 20 76 61 72 20 71 75 65 72 79 20        var query 
7940: 3d 20 66 72 6f 6d 20 6f 20 69 6e 20 64 62 2e 4f  = from o in db.O
7950: 72 64 65 72 44 65 74 61 69 6c 73 0d 0a 20 20 20  rderDetails..   
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 77 68 65 72 65 20 6f 2e 4f 72 64 65 72 49 44   where o.OrderID
7990: 20 3d 3d 20 6f 69 64 20 26 26 20 6f 2e 50 72 6f   == oid && o.Pro
79a0: 64 75 63 74 49 44 20 3d 3d 20 70 69 64 0d 0a 20  ductID == pid.. 
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79d0: 20 20 20 73 65 6c 65 63 74 20 6e 65 77 20 7b 20     select new { 
79e0: 4e 65 77 55 6e 69 74 50 72 69 63 65 20 3d 20 4d  NewUnitPrice = M
79f0: 61 74 68 2e 52 6f 75 6e 64 28 6f 2e 55 6e 69 74  ath.Round(o.Unit
7a00: 50 72 69 63 65 2c 20 6a 29 20 7d 3b 0d 0a 0d 0a  Price, j) };....
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
7a30: 28 6f 62 6a 65 63 74 20 6f 20 69 6e 20 71 75 65  (object o in que
7a40: 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry)..           
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7a80: 6f 6e 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20  once)..         
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7aa0: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
7ab0: 72 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20 20  rite(' ');....  
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ad0: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
7ae0: 65 2e 57 72 69 74 65 28 22 7b 30 7d 22 2c 20 6f  e.Write("{0}", o
7af0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b10: 20 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b 0d 0a    once = true;..
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7b70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7b80: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20    return 0;..   
7b90: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
7ba0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
7bb0: 69 63 20 69 6e 74 20 4f 6c 64 54 65 73 74 73 28  ic int OldTests(
7bc0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7bd0: 75 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64  using (northwind
7be0: 45 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20  EFEntities db = 
7bf0: 6e 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45  new northwindEFE
7c00: 6e 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20  ntities())..    
7c10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    {..        {..
7c20: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
7c30: 20 65 6e 74 69 74 79 53 51 4c 20 3d 20 22 53 45   entitySQL = "SE
7c40: 4c 45 43 54 20 56 41 4c 55 45 20 6f 20 46 52 4f  LECT VALUE o FRO
7c50: 4d 20 4f 72 64 65 72 73 20 41 53 20 6f 20 57 48  M Orders AS o WH
7c60: 45 52 45 20 53 51 4c 69 74 65 2e 44 61 74 65 50  ERE SQLite.DateP
7c70: 61 72 74 28 27 79 79 79 79 27 2c 20 6f 2e 4f 72  art('yyyy', o.Or
7c80: 64 65 72 44 61 74 65 29 20 3d 20 31 39 39 37 20  derDate) = 1997 
7c90: 4f 52 44 45 52 20 42 59 20 6f 2e 4f 72 64 65 72  ORDER BY o.Order
7ca0: 49 44 3b 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ID;";..         
7cb0: 20 4f 62 6a 65 63 74 51 75 65 72 79 3c 4f 72 64   ObjectQuery<Ord
7cc0: 65 72 73 3e 20 71 75 65 72 79 20 3d 20 64 62 2e  ers> query = db.
7cd0: 43 72 65 61 74 65 51 75 65 72 79 3c 4f 72 64 65  CreateQuery<Orde
7ce0: 72 73 3e 28 65 6e 74 69 74 79 53 51 4c 29 3b 0d  rs>(entitySQL);.
7cf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
7d00: 65 61 63 68 20 28 4f 72 64 65 72 73 20 6f 20 69  each (Orders o i
7d10: 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20 20  n query)..      
7d20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7d30: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
7d40: 4c 69 6e 65 28 6f 2e 53 68 69 70 50 6f 73 74 61  Line(o.ShipPosta
7d50: 6c 43 6f 64 65 29 3b 0d 0a 20 20 20 20 20 20 20  lCode);..       
7d60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
7d70: 0a 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  ...        {..  
7d80: 20 20 20 20 20 20 20 20 76 61 72 20 71 75 65 72          var quer
7d90: 79 20 3d 20 66 72 6f 6d 20 63 20 69 6e 20 64 62  y = from c in db
7da0: 2e 43 75 73 74 6f 6d 65 72 73 0d 0a 20 20 20 20  .Customers..    
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dc0: 20 20 77 68 65 72 65 20 63 2e 43 69 74 79 20 3d    where c.City =
7dd0: 3d 20 22 4c 6f 6e 64 6f 6e 22 0d 0a 20 20 20 20  = "London"..    
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7df0: 20 20 6f 72 64 65 72 62 79 20 63 2e 43 6f 6d 70    orderby c.Comp
7e00: 61 6e 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  anyName..       
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7e20: 65 6c 65 63 74 20 63 3b 0d 0a 0d 0a 20 20 20 20  elect c;....    
7e30: 20 20 20 20 20 20 69 6e 74 20 63 63 20 3d 20 71        int cc = q
7e40: 75 65 72 79 2e 43 6f 75 6e 74 28 29 3b 0d 0a 0d  uery.Count();...
7e50: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
7e60: 63 68 20 28 43 75 73 74 6f 6d 65 72 73 20 63 20  ch (Customers c 
7e70: 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20  in query)..     
7e80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7e90: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
7ea0: 65 4c 69 6e 65 28 63 2e 43 6f 6d 70 61 6e 79 4e  eLine(c.CompanyN
7eb0: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
7ec0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7ed0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7ee0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 63 69        string sci
7ef0: 74 79 20 3d 20 22 4c 6f 6e 64 6f 6e 22 3b 0d 0a  ty = "London";..
7f00: 20 20 20 20 20 20 20 20 20 20 43 75 73 74 6f 6d            Custom
7f10: 65 72 73 20 63 20 3d 20 64 62 2e 43 75 73 74 6f  ers c = db.Custo
7f20: 6d 65 72 73 2e 46 69 72 73 74 4f 72 44 65 66 61  mers.FirstOrDefa
7f30: 75 6c 74 28 63 64 20 3d 3e 20 63 64 2e 43 69 74  ult(cd => cd.Cit
7f40: 79 20 3d 3d 20 73 63 69 74 79 29 3b 0d 0a 20 20  y == scity);..  
7f50: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
7f60: 57 72 69 74 65 4c 69 6e 65 28 63 2e 43 6f 6d 70  WriteLine(c.Comp
7f70: 61 6e 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  anyName);..     
7f80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7f90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 44 61 74  {..          Dat
7fa0: 65 54 69 6d 65 20 64 74 20 3d 20 6e 65 77 20 44  eTime dt = new D
7fb0: 61 74 65 54 69 6d 65 28 31 39 39 37 2c 20 31 2c  ateTime(1997, 1,
7fc0: 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   1);..          
7fd0: 76 61 72 20 71 75 65 72 79 20 3d 20 66 72 6f 6d  var query = from
7fe0: 20 6f 72 64 65 72 20 69 6e 20 64 62 2e 4f 72 64   order in db.Ord
7ff0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
8000: 20 20 20 20 20 20 20 20 20 20 20 77 68 65 72 65             where
8010: 20 6f 72 64 65 72 2e 4f 72 64 65 72 44 61 74 65   order.OrderDate
8020: 20 3c 20 64 74 0d 0a 20 20 20 20 20 20 20 20 20   < dt..         
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 72 64               ord
8040: 65 72 62 79 20 6f 72 64 65 72 2e 4f 72 64 65 72  erby order.Order
8050: 49 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ID..            
8060: 20 20 20 20 20 20 20 20 20 20 73 65 6c 65 63 74            select
8070: 20 6f 72 64 65 72 3b 0d 0a 0d 0a 20 20 20 20 20   order;....     
8080: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4f 72       foreach (Or
8090: 64 65 72 73 20 6f 20 69 6e 20 71 75 65 72 79 29  ders o in query)
80a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
80b0: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
80c0: 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 6f 2e 4f  le.WriteLine(o.O
80d0: 72 64 65 72 44 61 74 65 2e 54 6f 53 74 72 69 6e  rderDate.ToStrin
80e0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
80f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
8100: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8110: 20 20 20 20 20 20 43 61 74 65 67 6f 72 69 65 73        Categories
8120: 20 63 20 3d 20 6e 65 77 20 43 61 74 65 67 6f 72   c = new Categor
8130: 69 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ies();..        
8140: 20 20 63 2e 43 61 74 65 67 6f 72 79 4e 61 6d 65    c.CategoryName
8150: 20 3d 20 22 54 65 73 74 20 43 61 74 65 67 6f 72   = "Test Categor
8160: 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  y";..          c
8170: 2e 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22  .Description = "
8180: 4d 79 20 44 65 73 63 72 69 70 74 69 6f 6e 22 3b  My Description";
8190: 0d 0a 20 20 20 20 20 20 20 20 20 20 64 62 2e 41  ..          db.A
81a0: 64 64 54 6f 43 61 74 65 67 6f 72 69 65 73 28 63  ddToCategories(c
81b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 64 62  );..          db
81c0: 2e 53 61 76 65 43 68 61 6e 67 65 73 28 29 3b 0d  .SaveChanges();.
81d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 43 6f 6e  ...          Con
81e0: 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 63  sole.WriteLine(c
81f0: 2e 43 61 74 65 67 6f 72 79 49 44 29 3b 0d 0a 0d  .CategoryID);...
8200: 0a 20 20 20 20 20 20 20 20 20 20 63 2e 44 65 73  .          c.Des
8210: 63 72 69 70 74 69 6f 6e 20 3d 20 22 4d 79 20 6d  cription = "My m
8220: 6f 64 69 66 69 65 64 20 64 65 73 63 72 69 70 74  odified descript
8230: 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
8240: 20 64 62 2e 53 61 76 65 43 68 61 6e 67 65 73 28   db.SaveChanges(
8250: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8260: 64 62 2e 44 65 6c 65 74 65 4f 62 6a 65 63 74 28  db.DeleteObject(
8270: 63 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 64  c);..          d
8280: 62 2e 53 61 76 65 43 68 61 6e 67 65 73 28 29 3b  b.SaveChanges();
8290: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
82a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
82b0: 20 20 20 20 43 75 73 74 6f 6d 65 72 73 20 63 75      Customers cu
82c0: 73 74 20 3d 20 6e 65 77 20 43 75 73 74 6f 6d 65  st = new Custome
82d0: 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rs();..         
82e0: 20 63 75 73 74 2e 43 75 73 74 6f 6d 65 72 49 44   cust.CustomerID
82f0: 20 3d 20 22 4d 54 4d 54 4d 22 3b 0d 0a 20 20 20   = "MTMTM";..   
8300: 20 20 20 20 20 20 20 63 75 73 74 2e 43 6f 6e 74         cust.Cont
8310: 61 63 74 4e 61 6d 65 20 3d 20 22 4d 79 20 4e 61  actName = "My Na
8320: 6d 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me";..          
8330: 63 75 73 74 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65  cust.CompanyName
8340: 20 3d 20 22 53 51 4c 69 74 65 20 43 6f 6d 70 61   = "SQLite Compa
8350: 6e 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ny";..          
8360: 63 75 73 74 2e 43 6f 75 6e 74 72 79 20 3d 20 22  cust.Country = "
8370: 4e 65 74 68 65 72 6c 61 6e 64 73 22 3b 0d 0a 20  Netherlands";.. 
8380: 20 20 20 20 20 20 20 20 20 63 75 73 74 2e 43 69           cust.Ci
8390: 74 79 20 3d 20 22 41 6d 73 74 65 72 64 61 6d 22  ty = "Amsterdam"
83a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75 73  ;..          cus
83b0: 74 2e 50 68 6f 6e 65 20 3d 20 22 30 31 32 33 34  t.Phone = "01234
83c0: 35 36 37 37 22 3b 0d 0a 20 20 20 20 20 20 20 20  5677";..        
83d0: 20 20 64 62 2e 41 64 64 54 6f 43 75 73 74 6f 6d    db.AddToCustom
83e0: 65 72 73 28 63 75 73 74 29 3b 0d 0a 20 20 20 20  ers(cust);..    
83f0: 20 20 20 20 20 20 64 62 2e 53 61 76 65 43 68 61        db.SaveCha
8400: 6e 67 65 73 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  nges();....     
8410: 20 20 20 20 20 64 62 2e 44 65 6c 65 74 65 4f 62       db.DeleteOb
8420: 6a 65 63 74 28 63 75 73 74 29 3b 0d 0a 20 20 20  ject(cust);..   
8430: 20 20 20 20 20 20 20 64 62 2e 53 61 76 65 43 68         db.SaveCh
8440: 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  anges();..      
8450: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 7b    }....        {
8460: 0d 0a 20 20 20 20 20 20 20 20 20 20 76 61 72 20  ..          var 
8470: 71 75 65 72 79 20 3d 20 64 62 2e 43 75 73 74 6f  query = db.Custo
8480: 6d 65 72 73 2e 57 68 65 72 65 28 63 75 73 74 20  mers.Where(cust 
8490: 3d 3e 20 63 75 73 74 2e 43 6f 75 6e 74 72 79 20  => cust.Country 
84a0: 3d 3d 20 22 44 65 6e 6d 61 72 6b 22 29 0d 0a 20  == "Denmark").. 
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84c0: 20 20 20 20 20 20 20 20 20 2e 53 65 6c 65 63 74           .Select
84d0: 4d 61 6e 79 28 63 75 73 74 20 3d 3e 20 63 75 73  Many(cust => cus
84e0: 74 2e 4f 72 64 65 72 73 2e 57 68 65 72 65 28 6f  t.Orders.Where(o
84f0: 20 3d 3e 20 6f 2e 46 72 65 69 67 68 74 20 3e 20   => o.Freight > 
8500: 35 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  5))..           
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
8520: 4f 72 64 65 72 42 79 28 6f 20 3d 3e 20 6f 2e 43  OrderBy(o => o.C
8530: 75 73 74 6f 6d 65 72 73 2e 43 75 73 74 6f 6d 65  ustomers.Custome
8540: 72 49 44 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rID);....       
8550: 20 20 20 66 6f 72 65 61 63 68 20 28 4f 72 64 65     foreach (Orde
8560: 72 73 20 63 20 69 6e 20 71 75 65 72 79 29 0d 0a  rs c in query)..
8570: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8580: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
8590: 2e 57 72 69 74 65 4c 69 6e 65 28 63 2e 46 72 65  .WriteLine(c.Fre
85a0: 69 67 68 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ight);..        
85b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
85c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
85d0: 20 20 20 20 20 20 20 76 61 72 20 71 75 65 72 79         var query
85e0: 20 3d 20 66 72 6f 6d 20 63 20 69 6e 20 64 62 2e   = from c in db.
85f0: 43 75 73 74 6f 6d 65 72 73 0d 0a 20 20 20 20 20  Customers..     
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 20 77 68 65 72 65 20 63 2e 4f 72 64 65 72 73 2e   where c.Orders.
8620: 41 6e 79 28 6f 20 3d 3e 20 6f 2e 4f 72 64 65 72  Any(o => o.Order
8630: 44 61 74 65 2e 48 61 73 56 61 6c 75 65 20 3d 3d  Date.HasValue ==
8640: 20 74 72 75 65 20 26 26 20 6f 2e 4f 72 64 65 72   true && o.Order
8650: 44 61 74 65 2e 56 61 6c 75 65 2e 59 65 61 72 20  Date.Value.Year 
8660: 3d 3d 20 31 39 39 37 29 0d 0a 20 20 20 20 20 20  == 1997)..      
8670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8680: 6f 72 64 65 72 62 79 20 63 2e 43 75 73 74 6f 6d  orderby c.Custom
8690: 65 72 49 44 0d 0a 20 20 20 20 20 20 20 20 20 20  erID..          
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 65              sele
86b0: 63 74 20 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ct c;....       
86c0: 20 20 20 66 6f 72 65 61 63 68 20 28 43 75 73 74     foreach (Cust
86d0: 6f 6d 65 72 73 20 63 20 69 6e 20 71 75 65 72 79  omers c in query
86e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
8700: 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 63 2e  ole.WriteLine(c.
8710: 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 3b 0d 0a 20  CompanyName);.. 
8720: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8730: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74   {..          st
8750: 72 69 6e 67 20 65 6e 74 69 74 79 53 51 4c 20 3d  ring entitySQL =
8760: 20 22 53 45 4c 45 43 54 20 56 41 4c 55 45 20 6f   "SELECT VALUE o
8770: 20 46 52 4f 4d 20 4f 72 64 65 72 73 20 41 53 20   FROM Orders AS 
8780: 6f 20 57 48 45 52 45 20 6f 2e 43 75 73 74 6f 6d  o WHERE o.Custom
8790: 65 72 73 2e 43 6f 75 6e 74 72 79 20 3c 3e 20 27  ers.Country <> '
87a0: 55 4b 27 20 41 4e 44 20 6f 2e 43 75 73 74 6f 6d  UK' AND o.Custom
87b0: 65 72 73 2e 43 6f 75 6e 74 72 79 20 3c 3e 20 27  ers.Country <> '
87c0: 4d 65 78 69 63 6f 27 20 41 4e 44 20 59 65 61 72  Mexico' AND Year
87d0: 28 6f 2e 4f 72 64 65 72 44 61 74 65 29 20 3d 20  (o.OrderDate) = 
87e0: 31 39 39 37 20 4f 52 44 45 52 20 42 59 20 6f 2e  1997 ORDER BY o.
87f0: 4f 72 64 65 72 49 44 3b 22 3b 0d 0a 20 20 20 20  OrderID;";..    
8800: 20 20 20 20 20 20 4f 62 6a 65 63 74 51 75 65 72        ObjectQuer
8810: 79 3c 4f 72 64 65 72 73 3e 20 71 75 65 72 79 20  y<Orders> query 
8820: 3d 20 64 62 2e 43 72 65 61 74 65 51 75 65 72 79  = db.CreateQuery
8830: 3c 4f 72 64 65 72 73 3e 28 65 6e 74 69 74 79 53  <Orders>(entityS
8840: 51 4c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  QL);....        
8850: 20 20 66 6f 72 65 61 63 68 20 28 4f 72 64 65 72    foreach (Order
8860: 73 20 6f 20 69 6e 20 71 75 65 72 79 29 0d 0a 20  s o in query).. 
8870: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8880: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
8890: 57 72 69 74 65 4c 69 6e 65 28 6f 2e 53 68 69 70  WriteLine(o.Ship
88a0: 50 6f 73 74 61 6c 43 6f 64 65 29 3b 0d 0a 20 20  PostalCode);..  
88b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
88c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
88d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  {..          str
88e0: 69 6e 67 20 65 6e 74 69 74 79 53 51 4c 20 3d 20  ing entitySQL = 
88f0: 22 53 45 4c 45 43 54 20 56 41 4c 55 45 20 6f 20  "SELECT VALUE o 
8900: 46 52 4f 4d 20 4f 72 64 65 72 73 20 41 53 20 6f  FROM Orders AS o
8910: 20 57 48 45 52 45 20 4e 65 77 47 75 69 64 28 29   WHERE NewGuid()
8920: 20 3c 3e 20 4e 65 77 47 75 69 64 28 29 20 4f 52   <> NewGuid() OR
8930: 44 45 52 20 42 59 20 6f 2e 4f 72 64 65 72 49 44  DER BY o.OrderID
8940: 3b 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 4f  ;";..          O
8950: 62 6a 65 63 74 51 75 65 72 79 3c 4f 72 64 65 72  bjectQuery<Order
8960: 73 3e 20 71 75 65 72 79 20 3d 20 64 62 2e 43 72  s> query = db.Cr
8970: 65 61 74 65 51 75 65 72 79 3c 4f 72 64 65 72 73  eateQuery<Orders
8980: 3e 28 65 6e 74 69 74 79 53 51 4c 29 3b 0d 0a 0d  >(entitySQL);...
8990: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
89a0: 63 68 20 28 4f 72 64 65 72 73 20 6f 20 69 6e 20  ch (Orders o in 
89b0: 71 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20  query)..        
89c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
89d0: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
89e0: 6e 65 28 6f 2e 53 68 69 70 50 6f 73 74 61 6c 43  ne(o.ShipPostalC
89f0: 6f 64 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ode);..         
8a00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
8a10: 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 68 69 73  .        // This
8a20: 20 71 75 65 72 79 20 72 65 71 75 69 72 65 73 20   query requires 
8a30: 53 51 4c 69 74 65 20 33 2e 36 2e 32 20 74 6f 20  SQLite 3.6.2 to 
8a40: 66 75 6e 63 74 69 6f 6e 20 63 6f 72 72 65 63 74  function correct
8a50: 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
8a60: 20 20 20 20 20 20 20 20 20 76 61 72 20 71 75 65           var que
8a70: 72 79 20 3d 20 66 72 6f 6d 20 70 20 69 6e 20 64  ry = from p in d
8a80: 62 2e 50 72 6f 64 75 63 74 73 0d 0a 20 20 20 20  b.Products..    
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8aa0: 20 20 77 68 65 72 65 20 70 2e 4f 72 64 65 72 44    where p.OrderD
8ab0: 65 74 61 69 6c 73 2e 43 6f 75 6e 74 28 6f 64 20  etails.Count(od 
8ac0: 3d 3e 20 6f 64 2e 4f 72 64 65 72 73 2e 43 75 73  => od.Orders.Cus
8ad0: 74 6f 6d 65 72 73 2e 43 6f 75 6e 74 72 79 20 3d  tomers.Country =
8ae0: 3d 20 70 2e 53 75 70 70 6c 69 65 72 73 2e 43 6f  = p.Suppliers.Co
8af0: 75 6e 74 72 79 29 20 3e 20 32 0d 0a 20 20 20 20  untry) > 2..    
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b10: 20 20 6f 72 64 65 72 62 79 20 70 2e 50 72 6f 64    orderby p.Prod
8b20: 75 63 74 49 44 0d 0a 20 20 20 20 20 20 20 20 20  uctID..         
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c               sel
8b40: 65 63 74 20 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ect p;....      
8b50: 20 20 20 20 66 6f 72 65 61 63 68 20 28 50 72 6f      foreach (Pro
8b60: 64 75 63 74 73 20 70 20 69 6e 20 71 75 65 72 79  ducts p in query
8b70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
8b90: 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 70 2e  ole.WriteLine(p.
8ba0: 50 72 6f 64 75 63 74 4e 61 6d 65 29 3b 0d 0a 20  ProductName);.. 
8bb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8bc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
8bd0: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
8be0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 28 4a 4a 4d 29    // NOTE: (JJM)
8bf0: 20 52 65 6d 6f 76 65 64 20 6f 6e 20 32 30 31 31   Removed on 2011
8c00: 2f 30 37 2f 30 36 2c 20 6d 61 6b 65 73 20 69 74  /07/06, makes it
8c10: 20 68 61 72 64 65 72 20 74 6f 20 72 75 6e 20 74   harder to run t
8c20: 68 69 73 20 45 58 45 20 76 69 61 0d 0a 20 20 20  his EXE via..   
8c30: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
8c40: 6e 65 77 20 75 6e 69 74 20 74 65 73 74 20 73 75  new unit test su
8c50: 69 74 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  ite...      //..
8c60: 20 20 20 20 20 20 2f 2f 20 43 6f 6e 73 6f 6c 65        // Console
8c70: 2e 52 65 61 64 4b 65 79 28 29 3b 0d 0a 0d 0a 20  .ReadKey();.... 
8c80: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
8c90: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a         }..  }..}..