System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 4b2966fccb9b76bcb5dc49143a001573268a531a:


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 20 7c  _462 || NET_47 |
14c0: 7c 20 4e 45 54 5f 34 37 31 20 7c 7c 20 4e 45 54  | NET_471 || NET
14d0: 5f 34 37 32 20 7c 7c 20 4e 45 54 5f 53 54 41 4e  _472 || NET_STAN
14e0: 44 41 52 44 5f 32 31 0d 0a 20 20 20 20 20 20 20  DARD_21..       
14f0: 20 20 20 20 20 20 20 63 61 73 65 20 22 62 69 6e         case "bin
1500: 61 72 79 67 75 69 64 32 22 3a 0d 0a 20 20 20 20  aryguid2":..    
1510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1530: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75         bool valu
1540: 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  e = false;....  
1550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1560: 20 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e      if (args.Len
1570: 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20  gth > 1)..      
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1590: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15b0: 28 21 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28  (!bool.TryParse(
15c0: 61 72 67 73 5b 31 5d 2c 20 6f 75 74 20 76 61 6c  args[1], out val
15d0: 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
15e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1610: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
1620: 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1640: 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 70         "cannot p
1650: 61 72 73 65 20 5c 22 7b 30 7d 5c 22 20 61 73 20  arse \"{0}\" as 
1660: 62 6f 6f 6c 65 61 6e 22 2c 0d 0a 20 20 20 20 20  boolean",..     
1670: 20 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 61 72 67               arg
1690: 73 5b 31 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s[1]);....      
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
16c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1710: 20 72 65 74 75 72 6e 20 42 69 6e 61 72 79 47 75   return BinaryGu
1720: 69 64 54 65 73 74 32 28 76 61 6c 75 65 29 3b 0d  idTest2(value);.
1730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1740: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 23 69     }..#endif..#i
1750: 66 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f  f NET_40 || NET_
1760: 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c  45 || NET_451 ||
1770: 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f   NET_452 || NET_
1780: 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31 20 7c 7c  46 || NET_461 ||
1790: 20 4e 45 54 5f 34 36 32 20 7c 7c 20 4e 45 54 5f   NET_462 || NET_
17a0: 34 37 20 7c 7c 20 4e 45 54 5f 34 37 31 20 7c 7c  47 || NET_471 ||
17b0: 20 4e 45 54 5f 34 37 32 20 7c 7c 20 4e 45 54 5f   NET_472 || NET_
17c0: 53 54 41 4e 44 41 52 44 5f 32 31 0d 0a 20 20 20  STANDARD_21..   
17d0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
17e0: 22 72 6f 75 6e 64 22 3a 0d 0a 20 20 20 20 20 20  "round":..      
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1810: 20 20 20 20 20 72 65 74 75 72 6e 20 52 6f 75 6e       return Roun
1820: 64 54 65 73 74 28 29 3b 0d 0a 20 20 20 20 20 20  dTest();..      
1830: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1840: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
1850: 20 20 20 20 20 63 61 73 65 20 22 63 6f 6d 70 6c       case "compl
1860: 65 78 70 72 69 6d 61 72 79 6b 65 79 22 3a 0d 0a  exprimarykey":..
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1890: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18a0: 6e 20 43 6f 6d 70 6c 65 78 50 72 69 6d 61 72 79  n ComplexPrimary
18b0: 4b 65 79 54 65 73 74 28 29 3b 0d 0a 20 20 20 20  KeyTest();..    
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64  .              d
18e0: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
18f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1910: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
1920: 65 4c 69 6e 65 28 22 75 6e 6b 6e 6f 77 6e 20 74  eLine("unknown t
1930: 65 73 74 20 5c 22 7b 30 7d 5c 22 22 2c 20 61 72  est \"{0}\"", ar
1940: 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g);..           
1950: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1960: 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n 1;..          
1970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1980: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1990: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
19a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
19b0: 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 6f 62  / Attempts to ob
19c0: 74 61 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79  tain the underly
19d0: 69 6e 67 20 73 74 6f 72 65 20 63 6f 6e 6e 65 63  ing store connec
19e0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  tion..      /// 
19f0: 28 61 20 3c 73 65 65 20 63 72 65 66 3d 22 44 62  (a <see cref="Db
1a00: 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 29 20  Connection" />) 
1a10: 66 72 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69  from the specifi
1a20: 65 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ed..      /// <s
1a30: 65 65 20 63 72 65 66 3d 22 45 6e 74 69 74 79 43  ee cref="EntityC
1a40: 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 2e 0d 0a  onnection" />...
1a50: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
1a70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 6e 74  <param name="ent
1a80: 69 74 79 43 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d  ityConnection">.
1a90: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  .      /// The <
1aa0: 73 65 65 20 63 72 65 66 3d 22 45 6e 74 69 74 79  see cref="Entity
1ab0: 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 74  Connection" /> t
1ac0: 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 2f 2f  o use...      //
1ad0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1ae0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1af0: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  .      /// The <
1b00: 73 65 65 20 63 72 65 66 3d 22 44 62 43 6f 6e 6e  see cref="DbConn
1b10: 65 63 74 69 6f 6e 22 20 2f 3e 20 2d 4f 52 2d 20  ection" /> -OR- 
1b20: 6e 75 6c 6c 20 69 66 20 69 74 0d 0a 20 20 20 20  null if it..    
1b30: 20 20 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20    /// cannot be 
1b40: 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20  determined...   
1b50: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1b60: 3e 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65  >..      private
1b70: 20 73 74 61 74 69 63 20 44 62 43 6f 6e 6e 65 63   static DbConnec
1b80: 74 69 6f 6e 20 47 65 74 53 74 6f 72 65 43 6f 6e  tion GetStoreCon
1b90: 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
1ba0: 20 20 20 20 45 6e 74 69 74 79 43 6f 6e 6e 65 63      EntityConnec
1bb0: 74 69 6f 6e 20 65 6e 74 69 74 79 43 6f 6e 6e 65  tion entityConne
1bc0: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ction..         
1bd0: 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20   )..      {..   
1be0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1bf0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f       // NOTE: No
1c00: 20 65 6e 74 69 74 79 20 63 6f 6e 6e 65 63 74 69   entity connecti
1c10: 6f 6e 2c 20 6e 6f 20 73 74 6f 72 65 20 63 6f 6e  on, no store con
1c20: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  nection...      
1c30: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c40: 20 20 69 66 20 28 65 6e 74 69 74 79 43 6f 6e 6e    if (entityConn
1c50: 65 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ection == null).
1c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1c70: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
1c80: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c90: 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20         // HACK: 
1ca0: 57 65 20 6e 65 65 64 20 74 68 65 20 75 6e 64 65  We need the unde
1cb0: 72 6c 79 69 6e 67 20 73 74 6f 72 65 20 63 6f 6e  rlying store con
1cc0: 6e 65 63 74 69 6f 6e 20 61 6e 64 0d 0a 20 20 20  nection and..   
1cd0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1ce0: 74 68 65 20 6c 65 67 61 63 79 20 76 65 72 73 69  the legacy versi
1cf0: 6f 6e 73 20 6f 66 20 74 68 65 20 2e 4e 45 54 20  ons of the .NET 
1d00: 46 72 61 6d 65 77 6f 72 6b 20 64 6f 0d 0a 20 20  Framework do..  
1d10: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1d20: 20 6e 6f 74 20 65 78 70 6f 73 65 20 69 74 3b 20   not expose it; 
1d30: 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d  therefore, attem
1d40: 70 74 20 74 6f 20 67 72 61 62 20 69 74 0d 0a 20  pt to grab it.. 
1d50: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1d60: 20 20 62 79 20 66 6f 72 63 65 2e 0d 0a 20 20 20    by force...   
1d70: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d80: 20 20 20 20 20 46 69 65 6c 64 49 6e 66 6f 20 66       FieldInfo f
1d90: 69 65 6c 64 49 6e 66 6f 20 3d 20 74 79 70 65 6f  ieldInfo = typeo
1da0: 66 28 45 6e 74 69 74 79 43 6f 6e 6e 65 63 74 69  f(EntityConnecti
1db0: 6f 6e 29 2e 47 65 74 46 69 65 6c 64 28 0d 0a 20  on).GetField(.. 
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5f 73               "_s
1dd0: 74 6f 72 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 2c  toreConnection",
1de0: 20 42 69 6e 64 69 6e 67 46 6c 61 67 73 2e 49 6e   BindingFlags.In
1df0: 73 74 61 6e 63 65 20 7c 0d 0a 20 20 20 20 20 20  stance |..      
1e00: 20 20 20 20 20 20 20 20 42 69 6e 64 69 6e 67 46          BindingF
1e10: 6c 61 67 73 2e 4e 6f 6e 50 75 62 6c 69 63 29 3b  lags.NonPublic);
1e20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
1e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e  ..          // N
1e40: 4f 54 45 3a 20 49 66 20 74 68 65 20 66 69 65 6c  OTE: If the fiel
1e50: 64 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64 2c 20  d is not found, 
1e60: 6a 75 73 74 20 72 65 74 75 72 6e 20 6e 75 6c 6c  just return null
1e70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  ...          //.
1e80: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66  .          if (f
1e90: 69 65 6c 64 49 6e 66 6f 20 3d 3d 20 6e 75 6c 6c  ieldInfo == null
1ea0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1eb0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
1ec0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
1ed0: 6e 20 66 69 65 6c 64 49 6e 66 6f 2e 47 65 74 56  n fieldInfo.GetV
1ee0: 61 6c 75 65 28 65 6e 74 69 74 79 43 6f 6e 6e 65  alue(entityConne
1ef0: 63 74 69 6f 6e 29 20 61 73 20 44 62 43 6f 6e 6e  ction) as DbConn
1f00: 65 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d  ection;..      }
1f10: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
1f20: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65      // NOTE: Use
1f30: 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
1f40: 20 74 68 65 20 53 55 42 53 54 52 20 66 75 6e 63   the SUBSTR func
1f50: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 0d  tion is used to.
1f60: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
1f70: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 53 75  implement the Su
1f80: 62 73 74 72 69 6e 67 20 6d 65 74 68 6f 64 2e 0d  bstring method..
1f90: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
1fa0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1fb0: 69 6e 74 20 53 75 62 53 74 72 69 6e 67 54 65 73  int SubStringTes
1fc0: 74 28 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  t()..      {..  
1fd0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 6e          using (n
1fe0: 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69  orthwindEFEntiti
1ff0: 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74  es db = new nort
2000: 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 28  hwindEFEntities(
2010: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
2020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
2030: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
2040: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2050: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 6e 63 65         bool once
2060: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
2070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2080: 61 72 20 71 75 65 72 79 20 3d 20 64 62 2e 43 75  ar query = db.Cu
2090: 73 74 6f 6d 65 72 73 2e 53 65 6c 65 63 74 28 0d  stomers.Select(.
20a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b0: 20 20 20 20 20 20 20 70 20 3d 3e 20 22 74 65 73         p => "tes
20c0: 74 22 2e 53 75 62 73 74 72 69 6e 67 28 31 29 20  t".Substring(1) 
20d0: 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  != null);....   
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
20f0: 6f 72 65 61 63 68 20 28 76 61 72 20 72 65 73 75  oreach (var resu
2100: 6c 74 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20  lt in query)..  
2110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2120: 7b 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 69 66 20 28 6f 6e 63           if (onc
2140: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
2160: 6e 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29  nsole.Write(' ')
2170: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2180: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
2190: 6c 65 2e 57 72 69 74 65 28 72 65 73 75 6c 74 29  le.Write(result)
21a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
21b0: 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20             once 
21c0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
21d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20    return 0;..   
2200: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2210: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2220: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
2230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
2240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2250: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
2260: 65 4c 69 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20  eLine(e);..     
2270: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2280: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2290: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a       return 1;..
22a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22b0: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
22c0: 54 45 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74  TE: Used to test
22d0: 20 74 68 65 20 66 69 78 20 66 6f 72 20 74 69 63   the fix for tic
22e0: 6b 65 74 20 5b 38 62 37 64 31 37 39 63 33 63 5d  ket [8b7d179c3c]
22f0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
2300: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2310: 63 20 69 6e 74 20 53 6b 69 70 54 65 73 74 28 69  c int SkipTest(i
2320: 6e 74 20 70 61 67 65 53 69 7a 65 29 0d 0a 20 20  nt pageSize)..  
2330: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2340: 20 75 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e   using (northwin
2350: 64 45 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d  dEFEntities db =
2360: 20 6e 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46   new northwindEF
2370: 45 6e 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20  Entities())..   
2380: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2390: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 6e 63          bool onc
23a0: 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  e = false;..    
23b0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f            int co
23c0: 75 6e 74 20 3d 20 64 62 2e 43 75 73 74 6f 6d 65  unt = db.Custome
23d0: 72 73 2e 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20  rs.Count();.... 
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
23f0: 20 50 61 67 65 43 6f 75 6e 74 20 3d 20 28 70 61   PageCount = (pa
2400: 67 65 53 69 7a 65 20 21 3d 20 30 29 20 3f 0d 0a  geSize != 0) ?..
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2420: 20 20 28 63 6f 75 6e 74 20 2f 20 70 61 67 65 53    (count / pageS
2430: 69 7a 65 29 20 2b 20 28 28 63 6f 75 6e 74 20 25  ize) + ((count %
2440: 20 70 61 67 65 53 69 7a 65 29 20 3d 3d 20 30 20   pageSize) == 0 
2450: 3f 20 30 20 3a 20 31 29 20 3a 20 31 3b 0d 0a 0d  ? 0 : 1) : 1;...
2460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
2470: 6f 72 20 28 69 6e 74 20 70 61 67 65 49 6e 64 65  or (int pageInde
2480: 78 20 3d 20 30 3b 20 70 61 67 65 49 6e 64 65 78  x = 0; pageIndex
2490: 20 3c 20 50 61 67 65 43 6f 75 6e 74 3b 20 70 61   < PageCount; pa
24a0: 67 65 49 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  geIndex++)..    
24b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
24d0: 61 72 20 71 75 65 72 79 20 3d 20 64 62 2e 43 75  ar query = db.Cu
24e0: 73 74 6f 6d 65 72 73 2e 4f 72 64 65 72 42 79 28  stomers.OrderBy(
24f0: 70 20 3d 3e 20 70 2e 43 69 74 79 29 2e 0d 0a 20  p => p.City)... 
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2510: 20 20 20 20 20 53 6b 69 70 28 70 61 67 65 53 69       Skip(pageSi
2520: 7a 65 20 2a 20 70 61 67 65 49 6e 64 65 78 29 2e  ze * pageIndex).
2530: 54 61 6b 65 28 70 61 67 65 53 69 7a 65 29 3b 0d  Take(pageSize);.
2540: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2550: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 75       foreach (Cu
2560: 73 74 6f 6d 65 72 73 20 63 75 73 74 6f 6d 65 72  stomers customer
2570: 73 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20  s in query)..   
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
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 69 66 20 28 6f 6e 63 65          if (once
25b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
25d0: 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b  sole.Write(' ');
25e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25f0: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
2600: 65 2e 57 72 69 74 65 28 63 75 73 74 6f 6d 65 72  e.Write(customer
2610: 73 2e 43 75 73 74 6f 6d 65 72 49 44 29 3b 0d 0a  s.CustomerID);..
2620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2630: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 74          once = t
2640: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2650: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2660: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2670: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2680: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
2690: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26a0: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
26b0: 54 45 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74  TE: Used to test
26c0: 20 74 68 65 20 66 69 78 20 66 6f 72 20 74 69 63   the fix for tic
26d0: 6b 65 74 20 5b 35 39 65 64 63 31 30 31 38 62 5d  ket [59edc1018b]
26e0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
26f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2700: 63 20 69 6e 74 20 45 6e 64 73 57 69 74 68 54 65  c int EndsWithTe
2710: 73 74 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29  st(string value)
2720: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2730: 20 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72 74       using (nort
2740: 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 20  hwindEFEntities 
2750: 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69  db = new northwi
2760: 6e 64 45 46 45 6e 74 69 74 69 65 73 28 29 29 0d  ndEFEntities()).
2770: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
2780: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2790: 20 6f 6e 63 65 20 3d 20 66 61 6c 73 65 3b 0d 0a   once = false;..
27a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
27b0: 72 20 71 75 65 72 79 20 3d 20 66 72 6f 6d 20 63  r query = from c
27c0: 20 69 6e 20 64 62 2e 43 75 73 74 6f 6d 65 72 73   in db.Customers
27d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 72              wher
27f0: 65 20 63 2e 43 69 74 79 2e 45 6e 64 73 57 69 74  e c.City.EndsWit
2800: 68 28 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  h(value)..      
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 20 20 6f 72 64 65 72 62 79 20 63 2e 43 75      orderby c.Cu
2830: 73 74 6f 6d 65 72 49 44 0d 0a 20 20 20 20 20 20  stomerID..      
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 20 20 20 20 73 65 6c 65 63 74 20 63 3b 0d 0a 0d      select c;...
2860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
2870: 6f 72 65 61 63 68 20 28 43 75 73 74 6f 6d 65 72  oreach (Customer
2880: 73 20 63 75 73 74 6f 6d 65 72 73 20 69 6e 20 71  s customers in q
2890: 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20  uery)..         
28a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e            if (on
28c0: 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
28d0: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
28e0: 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a  le.Write(' ');..
28f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2900: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
2910: 65 28 63 75 73 74 6f 6d 65 72 73 2e 43 75 73 74  e(customers.Cust
2920: 6f 6d 65 72 49 44 29 3b 0d 0a 0d 0a 20 20 20 20  omerID);....    
2930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e                on
2940: 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ce = true;..    
2950: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2960: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
2980: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
2990: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
29a0: 4f 54 45 3a 20 55 73 65 64 20 74 6f 20 76 65 72  OTE: Used to ver
29b0: 69 66 79 20 74 68 65 20 62 65 68 61 76 69 6f 72  ify the behavior
29c0: 20 66 72 6f 6d 20 74 69 63 6b 65 74 20 5b 30 30   from ticket [00
29d0: 66 38 36 66 39 37 33 39 5d 2e 0d 0a 20 20 20 20  f86f9739]...    
29e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69 76    //..      priv
29f0: 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 53  ate static int S
2a00: 74 61 72 74 73 57 69 74 68 54 65 73 74 28 73 74  tartsWithTest(st
2a10: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
2a20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a30: 75 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64  using (northwind
2a40: 45 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20  EFEntities db = 
2a50: 6e 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45  new northwindEFE
2a60: 6e 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20  ntities())..    
2a70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a80: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 6e 63 65         bool once
2a90: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
2aa0: 20 20 20 20 20 20 20 20 20 76 61 72 20 71 75 65           var que
2ab0: 72 79 20 3d 20 66 72 6f 6d 20 63 20 69 6e 20 64  ry = from c in d
2ac0: 62 2e 43 75 73 74 6f 6d 65 72 73 0d 0a 20 20 20  b.Customers..   
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae0: 20 20 20 20 20 20 20 77 68 65 72 65 20 63 2e 43         where c.C
2af0: 69 74 79 2e 53 74 61 72 74 73 57 69 74 68 28 76  ity.StartsWith(v
2b00: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alue)..         
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b20: 20 6f 72 64 65 72 62 79 20 63 2e 43 75 73 74 6f   orderby c.Custo
2b30: 6d 65 72 49 44 0d 0a 20 20 20 20 20 20 20 20 20  merID..         
2b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b50: 20 73 65 6c 65 63 74 20 63 3b 0d 0a 0d 0a 20 20   select c;....  
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2b70: 61 63 68 20 28 43 75 73 74 6f 6d 65 72 73 20 63  ach (Customers c
2b80: 75 73 74 6f 6d 65 72 73 20 69 6e 20 71 75 65 72  ustomers in quer
2b90: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
2ba0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bb0: 20 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65 29         if (once)
2bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd0: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
2be0: 57 72 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20  Write(' ');.... 
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c00: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 63   Console.Write(c
2c10: 75 73 74 6f 6d 65 72 73 2e 43 75 73 74 6f 6d 65  ustomers.Custome
2c20: 72 49 44 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rID);....       
2c30: 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20             once 
2c40: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2c50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c70: 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20     return 0;..  
2c80: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 55 53 45      }....#if USE
2c90: 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 26 26 20  _INTEROP_DLL && 
2ca0: 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f  INTEROP_EXTENSIO
2cb0: 4e 5f 46 55 4e 43 54 49 4f 4e 53 0d 0a 20 20 20  N_FUNCTIONS..   
2cc0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20     //..      // 
2cd0: 4e 4f 54 45 3a 20 55 73 65 64 20 74 6f 20 74 65  NOTE: Used to te
2ce0: 73 74 20 74 68 65 20 66 69 78 20 66 6f 72 20 74  st the fix for t
2cf0: 69 63 6b 65 74 20 5b 30 61 33 32 38 38 35 31 30  icket [0a3288510
2d00: 39 5d 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  9]...      //.. 
2d10: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2d20: 74 69 63 20 69 6e 74 20 55 6e 69 6f 6e 41 6c 6c  tic int UnionAll
2d30: 54 65 73 74 28 29 0d 0a 20 20 20 20 20 20 7b 0d  Test()..      {.
2d40: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
2d50: 20 28 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74   (northwindEFEnt
2d60: 69 74 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e  ities db = new n
2d70: 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69  orthwindEFEntiti
2d80: 65 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  es())..         
2d90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2da0: 20 20 62 6f 6f 6c 20 6f 6e 63 65 20 3d 20 66 61    bool once = fa
2db0: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
2dc0: 20 20 20 20 20 20 76 61 72 20 63 75 73 74 6f 6d        var custom
2dd0: 65 72 73 31 20 3d 20 64 62 2e 43 75 73 74 6f 6d  ers1 = db.Custom
2de0: 65 72 73 2e 57 68 65 72 65 28 0d 0a 20 20 20 20  ers.Where(..    
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 20                f 
2e00: 3d 3e 20 66 2e 4f 72 64 65 72 73 2e 41 6e 79 28  => f.Orders.Any(
2e10: 29 29 2e 4f 72 64 65 72 42 79 44 65 73 63 65 6e  )).OrderByDescen
2e20: 64 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ding(..         
2e30: 20 20 20 20 20 20 20 20 20 20 20 66 20 3d 3e 20             f => 
2e40: 66 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 2e 53  f.CompanyName).S
2e50: 6b 69 70 28 31 29 2e 54 61 6b 65 28 31 29 3b 0d  kip(1).Take(1);.
2e60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e70: 20 76 61 72 20 63 75 73 74 6f 6d 65 72 73 32 20   var customers2 
2e80: 3d 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 2e 57  = db.Customers.W
2e90: 68 65 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20  here(..         
2ea0: 20 20 20 20 20 20 20 20 20 66 20 3d 3e 20 66 2e           f => f.
2eb0: 4f 72 64 65 72 73 2e 41 6e 79 28 29 29 2e 4f 72  Orders.Any()).Or
2ec0: 64 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20  derBy(..        
2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 66 20 3d 3e              f =>
2ee0: 20 66 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 2e   f.CompanyName).
2ef0: 53 6b 69 70 28 31 29 2e 54 61 6b 65 28 31 29 3b  Skip(1).Take(1);
2f00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f10: 20 20 76 61 72 20 63 75 73 74 6f 6d 65 72 73 33    var customers3
2f20: 20 3d 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 2e   = db.Customers.
2f30: 57 68 65 72 65 28 0d 0a 20 20 20 20 20 20 20 20  Where(..        
2f40: 20 20 20 20 20 20 20 20 20 20 66 20 3d 3e 20 66            f => f
2f50: 2e 43 75 73 74 6f 6d 65 72 49 44 2e 53 74 61 72  .CustomerID.Star
2f60: 74 73 57 69 74 68 28 22 42 22 29 29 2e 4f 72 64  tsWith("B")).Ord
2f70: 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20  erBy(..         
2f80: 20 20 20 20 20 20 20 20 20 20 20 66 20 3d 3e 20             f => 
2f90: 66 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 2e 53  f.CompanyName).S
2fa0: 6b 69 70 28 31 29 2e 54 61 6b 65 28 31 29 3b 0d  kip(1).Take(1);.
2fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fc0: 20 66 6f 72 65 61 63 68 20 28 76 61 72 20 63 75   foreach (var cu
2fd0: 73 74 6f 6d 65 72 20 69 6e 20 63 75 73 74 6f 6d  stomer in custom
2fe0: 65 72 73 31 29 0d 0a 20 20 20 20 20 20 20 20 20  ers1)..         
2ff0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3000: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e            if (on
3010: 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
3020: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
3030: 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a  le.Write(' ');..
3040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3050: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
3060: 65 28 63 75 73 74 6f 6d 65 72 2e 43 75 73 74 6f  e(customer.Custo
3070: 6d 65 72 49 44 29 3b 0d 0a 20 20 20 20 20 20 20  merID);..       
3080: 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20             once 
3090: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
30a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30b0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
30c0: 68 20 28 76 61 72 20 63 75 73 74 6f 6d 65 72 20  h (var customer 
30d0: 69 6e 20 63 75 73 74 6f 6d 65 72 73 32 29 0d 0a  in customers2)..
30e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3100: 20 20 20 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20     if (once)..  
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
3130: 65 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  e(' ');....     
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
3150: 73 6f 6c 65 2e 57 72 69 74 65 28 63 75 73 74 6f  sole.Write(custo
3160: 6d 65 72 2e 43 75 73 74 6f 6d 65 72 49 44 29 3b  mer.CustomerID);
3170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3180: 20 20 20 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b      once = true;
3190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
31b0: 20 20 20 66 6f 72 65 61 63 68 20 28 76 61 72 20     foreach (var 
31c0: 63 75 73 74 6f 6d 65 72 20 69 6e 20 63 75 73 74  customer in cust
31d0: 6f 6d 65 72 73 33 29 0d 0a 20 20 20 20 20 20 20  omers3)..       
31e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3200: 6f 6e 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20  once)..         
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
3220: 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b  sole.Write(' ');
3230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3240: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
3250: 69 74 65 28 63 75 73 74 6f 6d 65 72 2e 43 75 73  ite(customer.Cus
3260: 74 6f 6d 65 72 49 44 29 3b 0d 0a 20 20 20 20 20  tomerID);..     
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63               onc
3280: 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
3290: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
32b0: 61 63 68 20 28 76 61 72 20 63 75 73 74 6f 6d 65  ach (var custome
32c0: 72 20 69 6e 20 63 75 73 74 6f 6d 65 72 73 31 2e  r in customers1.
32d0: 43 6f 6e 63 61 74 28 63 75 73 74 6f 6d 65 72 73  Concat(customers
32e0: 32 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2))..           
32f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3300: 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65          if (once
3310: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3320: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
3330: 2e 57 72 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a  .Write(' ');....
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3350: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28    Console.Write(
3360: 63 75 73 74 6f 6d 65 72 2e 43 75 73 74 6f 6d 65  customer.Custome
3370: 72 49 44 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rID);..         
3380: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
3390: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
33a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33b0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
33c0: 28 76 61 72 20 63 75 73 74 6f 6d 65 72 20 69 6e  (var customer in
33d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33e0: 20 20 20 20 20 20 63 75 73 74 6f 6d 65 72 73 31        customers1
33f0: 2e 43 6f 6e 63 61 74 28 63 75 73 74 6f 6d 65 72  .Concat(customer
3400: 73 32 29 2e 43 6f 6e 63 61 74 28 63 75 73 74 6f  s2).Concat(custo
3410: 6d 65 72 73 33 29 29 0d 0a 20 20 20 20 20 20 20  mers3))..       
3420: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3430: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3440: 6f 6e 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20  once)..         
3450: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
3460: 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b  sole.Write(' ');
3470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3480: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
3490: 69 74 65 28 63 75 73 74 6f 6d 65 72 2e 43 75 73  ite(customer.Cus
34a0: 74 6f 6d 65 72 49 44 29 3b 0d 0a 20 20 20 20 20  tomerID);..     
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63               onc
34c0: 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
34d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
34e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34f0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
3500: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
3510: 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
3520: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 64     // NOTE: Used
3530: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 69 78   to test the fix
3540: 20 66 6f 72 20 74 69 63 6b 65 74 20 5b 63 63 66   for ticket [ccf
3550: 61 36 39 66 63 33 32 5d 2e 0d 0a 20 20 20 20 20  a69fc32]...     
3560: 20 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61   //..      priva
3570: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 45 46  te static int EF
3580: 54 72 61 6e 73 61 63 74 69 6f 6e 54 65 73 74 28  TransactionTest(
3590: 62 6f 6f 6c 20 61 64 64 29 0d 0a 20 20 20 20 20  bool add)..     
35a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
35b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e  ..          // N
35c0: 4f 54 45 3a 20 53 6f 6d 65 20 6f 66 20 74 68 65  OTE: Some of the
35d0: 73 65 20 74 65 72 72 69 74 6f 72 69 65 73 20 61  se territories a
35e0: 6c 72 65 61 64 79 20 65 78 69 73 74 20 61 6e 64  lready exist and
35f0: 20 73 68 6f 75 6c 64 20 63 61 75 73 65 0d 0a 20   should cause.. 
3600: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3610: 20 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 74    an exception t
3620: 6f 20 62 65 20 74 68 72 6f 77 6e 20 77 68 65 6e  o be thrown when
3630: 20 77 65 20 74 72 79 20 74 6f 20 49 4e 53 45 52   we try to INSER
3640: 54 20 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20 20  T them...       
3650: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3660: 20 6c 6f 6e 67 5b 5d 20 74 65 72 72 69 74 6f 72   long[] territor
3670: 79 49 64 73 20 3d 20 6e 65 77 20 6c 6f 6e 67 5b  yIds = new long[
3680: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
3690: 20 20 20 20 20 20 31 2c 20 20 20 20 32 2c 20 20        1,    2,  
36a0: 20 20 33 2c 20 20 20 20 34 2c 20 20 20 20 35 2c    3,    4,    5,
36b0: 20 2f 2f 20 4e 4f 54 45 3a 20 53 75 63 63 65 73   // NOTE: Succes
36c0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
36d0: 20 20 20 20 36 2c 20 20 20 20 37 2c 20 20 20 20      6,    7,    
36e0: 38 2c 20 20 20 20 39 2c 20 20 20 31 30 2c 20 2f  8,    9,   10, /
36f0: 2f 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 0d  / NOTE: Success.
3700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31  .              1
3710: 35 37 36 2c 20 31 35 37 37 2c 20 31 35 37 38 2c  576, 1577, 1578,
3720: 20 31 35 37 39 2c 20 31 35 38 30 2c 20 2f 2f 20   1579, 1580, // 
3730: 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 0d 0a 20  NOTE: Success.. 
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 35 38               158
3750: 31 2c 20 31 37 33 30 2c 20 31 38 33 33 2c 20 32  1, 1730, 1833, 2
3760: 31 31 36 2c 20 32 31 33 39 2c 20 2f 2f 20 4e 4f  116, 2139, // NO
3770: 54 45 3a 20 46 61 69 6c 20 28 31 35 38 31 29 0d  TE: Fail (1581).
3780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32  .              2
3790: 31 34 30 2c 20 32 31 34 31 20 20 20 20 20 20 20  140, 2141       
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
37b0: 4e 4f 54 45 3a 20 53 6b 69 70 70 65 64 0d 0a 20  NOTE: Skipped.. 
37c0: 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20           };.... 
37d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
37e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
3800: 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46  ing (northwindEF
3810: 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65  Entities db = ne
3820: 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74  w northwindEFEnt
3830: 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20  ities())..      
3840: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3850: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
3860: 6e 67 20 28 54 72 61 6e 73 61 63 74 69 6f 6e 53  ng (TransactionS
3870: 63 6f 70 65 20 73 63 6f 70 65 20 3d 20 6e 65 77  cope scope = new
3880: 20 54 72 61 6e 73 61 63 74 69 6f 6e 53 63 6f 70   TransactionScop
3890: 65 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e())..          
38a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38c0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
38d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
38e0: 54 45 3a 20 2a 52 45 51 55 49 52 45 44 2a 20 54  TE: *REQUIRED* T
38f0: 68 69 73 20 69 73 20 72 65 71 75 69 72 65 64 20  his is required 
3900: 73 6f 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20  so that the..   
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3920: 20 20 20 2f 2f 20 20 20 20 20 20 20 45 6e 74 69     //       Enti
3930: 74 79 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20  ty Framework is 
3940: 70 72 65 76 65 6e 74 65 64 20 66 72 6f 6d 20 6f  prevented from o
3950: 70 65 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  pening..        
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3970: 20 20 20 20 20 20 20 6d 75 6c 74 69 70 6c 65 20         multiple 
3980: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74  connections to t
3990: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51  he underlying SQ
39a0: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Lite..          
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
39c0: 20 20 20 20 20 64 61 74 61 62 61 73 65 20 28 69       database (i
39d0: 2e 65 2e 20 77 68 69 63 68 20 77 6f 75 6c 64 20  .e. which would 
39e0: 72 65 73 75 6c 74 20 69 6e 20 6d 75 6c 74 69 70  result in multip
39f0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
3a00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3a10: 20 20 20 49 4d 4d 45 44 49 41 54 45 20 74 72 61     IMMEDIATE tra
3a20: 6e 73 61 63 74 69 6f 6e 73 2c 20 74 68 65 72 65  nsactions, there
3a30: 62 79 20 66 61 69 6c 69 6e 67 20 5b 6c 61 74 65  by failing [late
3a40: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
3a50: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3a60: 20 20 6f 6e 5d 20 77 69 74 68 20 6c 6f 63 6b 69    on] with locki
3a70: 6e 67 20 65 72 72 6f 72 73 29 2e 0d 0a 20 20 20  ng errors)...   
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a90: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2e               db.
3ab0: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28  Connection.Open(
3ac0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
3ae0: 61 63 68 20 28 69 6e 74 20 69 64 20 69 6e 20 74  ach (int id in t
3af0: 65 72 72 69 74 6f 72 79 49 64 73 29 0d 0a 20 20  erritoryIds)..  
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b30: 20 54 65 72 72 69 74 6f 72 69 65 73 20 74 65 72   Territories ter
3b40: 72 69 74 6f 72 69 65 73 20 3d 20 6e 65 77 20 54  ritories = new T
3b50: 65 72 72 69 74 6f 72 69 65 73 28 29 3b 0d 0a 0d  erritories();...
3b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3b70: 20 20 20 20 20 20 20 20 20 20 20 74 65 72 72 69             terri
3b80: 74 6f 72 69 65 73 2e 54 65 72 72 69 74 6f 72 79  tories.Territory
3b90: 49 44 20 3d 20 69 64 3b 0d 0a 20 20 20 20 20 20  ID = id;..      
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bb0: 20 20 20 20 74 65 72 72 69 74 6f 72 69 65 73 2e      territories.
3bc0: 54 65 72 72 69 74 6f 72 79 44 65 73 63 72 69 70  TerritoryDescrip
3bd0: 74 69 6f 6e 20 3d 20 53 74 72 69 6e 67 2e 46 6f  tion = String.Fo
3be0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 20 22 54 65 73 74 20 54 65 72 72 69       "Test Terri
3c10: 74 6f 72 79 20 23 7b 30 7d 22 2c 20 69 64 29 3b  tory #{0}", id);
3c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 72 72              terr
3c40: 69 74 6f 72 69 65 73 2e 52 65 67 69 6f 6e 73 20  itories.Regions 
3c50: 3d 20 64 62 2e 52 65 67 69 6f 6e 73 2e 46 69 72  = db.Regions.Fir
3c60: 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c80: 20 20 20 64 62 2e 41 64 64 4f 62 6a 65 63 74 28     db.AddObject(
3c90: 22 54 65 72 72 69 74 6f 72 69 65 73 22 2c 20 74  "Territories", t
3ca0: 65 72 72 69 74 6f 72 69 65 73 29 3b 0d 0a 20 20  erritories);..  
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3ce0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
3cf0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
3d00: 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34   NET_40 || NET_4
3d10: 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c 20  5 || NET_451 || 
3d20: 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f 34  NET_452 || NET_4
3d30: 36 20 7c 7c 20 4e 45 54 5f 34 36 31 20 7c 7c 20  6 || NET_461 || 
3d40: 4e 45 54 5f 34 36 32 20 7c 7c 20 4e 45 54 5f 34  NET_462 || NET_4
3d50: 37 20 7c 7c 20 4e 45 54 5f 34 37 31 20 7c 7c 20  7 || NET_471 || 
3d60: 4e 45 54 5f 34 37 32 20 7c 7c 20 4e 45 54 5f 53  NET_472 || NET_S
3d70: 54 41 4e 44 41 52 44 5f 32 31 0d 0a 20 20 20 20  TANDARD_21..    
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 20 20 20 20 20 64 62 2e 53 61 76 65 43 68 61        db.SaveCha
3da0: 6e 67 65 73 28 53 61 76 65 4f 70 74 69 6f 6e 73  nges(SaveOptions
3db0: 2e 4e 6f 6e 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  .None);..#else..
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 20 20 20 20 20 20 20 20 20 64 62 2e 53 61 76            db.Sav
3de0: 65 43 68 61 6e 67 65 73 28 66 61 6c 73 65 29 3b  eChanges(false);
3df0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
3e20: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
3e30: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e70: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
3e80: 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ne(e);..        
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3eb0: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
3ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ed0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ef0: 20 20 20 73 63 6f 70 65 2e 43 6f 6d 70 6c 65 74     scope.Complet
3f00: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f20: 64 62 2e 41 63 63 65 70 74 41 6c 6c 43 68 61 6e  db.AcceptAllChan
3f30: 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ges();..        
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3f60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3f70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3f80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
3f90: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  se..          {.
3fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
3fb0: 73 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45  sing (northwindE
3fc0: 46 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e  FEntities db = n
3fd0: 65 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e  ew northwindEFEn
3fe0: 74 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20  tities())..     
3ff0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
4010: 6f 6c 20 6f 6e 63 65 20 3d 20 66 61 6c 73 65 3b  ol once = false;
4020: 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20  ..#if NET_40 || 
4030: 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35  NET_45 || NET_45
4040: 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20  1 || NET_452 || 
4050: 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36  NET_46 || NET_46
4060: 31 20 7c 7c 20 4e 45 54 5f 34 36 32 20 7c 7c 20  1 || NET_462 || 
4070: 4e 45 54 5f 34 37 20 7c 7c 20 4e 45 54 5f 34 37  NET_47 || NET_47
4080: 31 20 7c 7c 20 4e 45 54 5f 34 37 32 20 7c 7c 20  1 || NET_472 || 
4090: 4e 45 54 5f 53 54 41 4e 44 41 52 44 5f 32 31 0d  NET_STANDARD_21.
40a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
40b0: 20 20 20 76 61 72 20 71 75 65 72 79 20 3d 20 66     var query = f
40c0: 72 6f 6d 20 74 20 69 6e 20 64 62 2e 54 65 72 72  rom t in db.Terr
40d0: 69 74 6f 72 69 65 73 0d 0a 20 20 20 20 20 20 20  itories..       
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65               whe
40f0: 72 65 20 74 65 72 72 69 74 6f 72 79 49 64 73 2e  re territoryIds.
4100: 41 73 51 75 65 72 79 61 62 6c 65 3c 6c 6f 6e 67  AsQueryable<long
4110: 3e 28 29 2e 43 6f 6e 74 61 69 6e 73 3c 6c 6f 6e  >().Contains<lon
4120: 67 3e 28 74 2e 54 65 72 72 69 74 6f 72 79 49 44  g>(t.TerritoryID
4130: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4140: 20 20 20 20 20 20 20 6f 72 64 65 72 62 79 20 74         orderby t
4150: 2e 54 65 72 72 69 74 6f 72 79 49 44 0d 0a 20 20  .TerritoryID..  
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4170: 20 20 73 65 6c 65 63 74 20 74 3b 0d 0a 0d 0a 20    select t;.... 
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4190: 20 66 6f 72 65 61 63 68 20 28 54 65 72 72 69 74   foreach (Territ
41a0: 6f 72 69 65 73 20 74 65 72 72 69 74 6f 72 69 65  ories territorie
41b0: 73 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20  s in query)..   
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
41d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41e0: 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e 63 65          if (once
41f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
4210: 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b  sole.Write(' ');
4220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4230: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
4240: 65 2e 57 72 69 74 65 28 74 65 72 72 69 74 6f 72  e.Write(territor
4250: 69 65 73 2e 54 65 72 72 69 74 6f 72 79 49 44 29  ies.TerritoryID)
4260: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4270: 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20             once 
4280: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
4290: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
42a0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
42b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
42d0: 48 41 43 4b 3a 20 57 65 20 63 61 6e 6e 6f 74 20  HACK: We cannot 
42e0: 75 73 65 20 74 68 65 20 43 6f 6e 74 61 69 6e 73  use the Contains
42f0: 20 65 78 74 65 6e 73 69 6f 6e 20 6d 65 74 68 6f   extension metho
4300: 64 20 77 69 74 68 69 6e 20 61 0d 0a 20 20 20 20  d within a..    
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4320: 20 20 20 20 20 20 20 4c 49 4e 51 20 71 75 65 72         LINQ quer
4330: 79 20 77 69 74 68 20 74 68 65 20 2e 4e 45 54 20  y with the .NET 
4340: 46 72 61 6d 65 77 6f 72 6b 20 33 2e 35 2e 0d 0a  Framework 3.5...
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4370: 20 20 20 20 20 20 20 20 76 61 72 20 71 75 65 72          var quer
4380: 79 20 3d 20 66 72 6f 6d 20 74 20 69 6e 20 64 62  y = from t in db
4390: 2e 54 65 72 72 69 74 6f 72 69 65 73 0d 0a 20 20  .Territories..  
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 20 6f 72 64 65 72 62 79 20 74 2e 54 65 72 72    orderby t.Terr
43c0: 69 74 6f 72 79 49 44 0d 0a 20 20 20 20 20 20 20  itoryID..       
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c               sel
43e0: 65 63 74 20 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ect t;....      
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
4400: 61 63 68 20 28 54 65 72 72 69 74 6f 72 69 65 73  ach (Territories
4410: 20 74 65 72 72 69 74 6f 72 69 65 73 20 69 6e 20   territories in 
4420: 71 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20  query)..        
4430: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 20 20 20 69 66 20 28 41 72 72 61 79 2e 49 6e 64     if (Array.Ind
4460: 65 78 4f 66 28 74 65 72 72 69 74 6f 72 79 49 64  exOf(territoryId
4470: 73 2c 20 74 65 72 72 69 74 6f 72 69 65 73 2e 54  s, territories.T
4480: 65 72 72 69 74 6f 72 79 49 44 29 20 3d 3d 20 2d  erritoryID) == -
4490: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
44b0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44d0: 20 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20   if (once)..    
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44f0: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
4500: 69 74 65 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20  ite(' ');....   
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4520: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
4530: 28 74 65 72 72 69 74 6f 72 69 65 73 2e 54 65 72  (territories.Ter
4540: 72 69 74 6f 72 79 49 44 29 3b 0d 0a 0d 0a 20 20  ritoryID);....  
4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4560: 20 20 20 20 6f 6e 63 65 20 3d 20 74 72 75 65 3b      once = true;
4570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4580: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
45a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
45b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
45c0: 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  0;..      }.... 
45d0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f       //..      /
45e0: 2f 20 4e 4f 54 45 3a 20 55 73 65 64 20 74 6f 20  / NOTE: Used to 
45f0: 74 65 73 74 20 74 68 65 20 49 4e 53 45 52 54 20  test the INSERT 
4600: 66 69 78 20 28 69 2e 65 2e 20 61 6e 20 65 78 74  fix (i.e. an ext
4610: 72 61 20 73 65 6d 69 2d 63 6f 6c 6f 6e 20 69 6e  ra semi-colon in
4620: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
4630: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
4640: 6e 74 20 61 66 74 65 72 20 74 68 65 20 61 63 74  nt after the act
4650: 75 61 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65  ual INSERT state
4660: 6d 65 6e 74 20 69 6e 0d 0a 20 20 20 20 20 20 2f  ment in..      /
4670: 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c 6c  /       the foll
4680: 6f 77 2d 75 70 20 53 45 4c 45 43 54 20 73 74 61  ow-up SELECT sta
4690: 74 65 6d 65 6e 74 29 2e 0d 0a 20 20 20 20 20 20  tement)...      
46a0: 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74  //..      privat
46b0: 65 20 73 74 61 74 69 63 20 69 6e 74 20 49 6e 73  e static int Ins
46c0: 65 72 74 54 65 73 74 28 29 0d 0a 20 20 20 20 20  ertTest()..     
46d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73   {..          us
46e0: 69 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46  ing (northwindEF
46f0: 45 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65  Entities db = ne
4700: 77 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74  w northwindEFEnt
4710: 69 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20  ities())..      
4720: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4730: 20 20 20 20 20 6c 6f 6e 67 20 6f 72 64 65 72 49       long orderI
4740: 64 20 3d 20 31 30 32 34 38 3b 0d 0a 20 20 20 20  d = 10248;..    
4750: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 70            long p
4760: 72 6f 64 75 63 74 49 64 20 3d 20 31 3b 0d 0a 20  roductId = 1;.. 
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
4780: 5b 5d 20 63 6f 75 6e 74 73 20 3d 20 7b 20 30 20  [] counts = { 0 
4790: 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
47a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
47b0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a        // NOTE: *
47c0: 52 45 51 55 49 52 45 44 2a 20 54 68 69 73 20 69  REQUIRED* This i
47d0: 73 20 72 65 71 75 69 72 65 64 20 73 6f 20 74 68  s required so th
47e0: 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  at the..        
47f0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 45        //       E
4800: 6e 74 69 74 79 20 46 72 61 6d 65 77 6f 72 6b 20  ntity Framework 
4810: 69 73 20 70 72 65 76 65 6e 74 65 64 20 66 72 6f  is prevented fro
4820: 6d 20 6f 70 65 6e 69 6e 67 0d 0a 20 20 20 20 20  m opening..     
4830: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4840: 20 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 6e 65    multiple conne
4850: 63 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 75 6e  ctions to the un
4860: 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 0d  derlying SQLite.
4870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
4880: 2f 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65  /       database
4890: 20 28 69 2e 65 2e 20 77 68 69 63 68 20 77 6f 75   (i.e. which wou
48a0: 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 6d 75 6c  ld result in mul
48b0: 74 69 70 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  tiple..         
48c0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 4d       //       IM
48d0: 4d 45 44 49 41 54 45 20 74 72 61 6e 73 61 63 74  MEDIATE transact
48e0: 69 6f 6e 73 2c 20 74 68 65 72 65 62 79 20 66 61  ions, thereby fa
48f0: 69 6c 69 6e 67 20 5b 6c 61 74 65 72 0d 0a 20 20  iling [later..  
4900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
4910: 20 20 20 20 20 6f 6e 5d 20 77 69 74 68 20 6c 6f       on] with lo
4920: 63 6b 69 6e 67 20 65 72 72 6f 72 73 29 2e 0d 0a  cking errors)...
4930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4950: 64 62 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70  db.Connection.Op
4960: 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  en();....       
4970: 20 20 20 20 20 20 20 4b 65 79 56 61 6c 75 65 50         KeyValueP
4980: 61 69 72 3c 73 74 72 69 6e 67 2c 20 6f 62 6a 65  air<string, obje
4990: 63 74 3e 20 6f 72 64 65 72 49 64 50 61 69 72 20  ct> orderIdPair 
49a0: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
49b0: 20 20 20 20 20 6e 65 77 20 4b 65 79 56 61 6c 75       new KeyValu
49c0: 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 6f 62  ePair<string, ob
49d0: 6a 65 63 74 3e 28 22 4f 72 64 65 72 49 44 22 2c  ject>("OrderID",
49e0: 20 6f 72 64 65 72 49 64 29 3b 0d 0a 0d 0a 20 20   orderId);....  
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79 56              KeyV
4a00: 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c  aluePair<string,
4a10: 20 6f 62 6a 65 63 74 3e 20 70 72 6f 64 75 63 74   object> product
4a20: 49 64 50 61 69 72 20 3d 0d 0a 20 20 20 20 20 20  IdPair =..      
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
4a40: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72  KeyValuePair<str
4a50: 69 6e 67 2c 20 6f 62 6a 65 63 74 3e 28 22 50 72  ing, object>("Pr
4a60: 6f 64 75 63 74 49 44 22 2c 20 70 72 6f 64 75 63  oductID", produc
4a70: 74 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tId);....       
4a80: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ac0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4ad0: 20 20 20 20 20 20 20 20 20 20 4f 72 64 65 72 44            OrderD
4ae0: 65 74 61 69 6c 73 20 6e 65 77 4f 72 64 65 72 44  etails newOrderD
4af0: 65 74 61 69 6c 73 20 3d 20 6e 65 77 20 4f 72 64  etails = new Ord
4b00: 65 72 44 65 74 61 69 6c 73 28 29 3b 0d 0a 0d 0a  erDetails();....
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
4b20: 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 4f 72  wOrderDetails.Or
4b30: 64 65 72 49 44 20 3d 20 6f 72 64 65 72 49 64 3b  derID = orderId;
4b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4b50: 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e  newOrderDetails.
4b60: 50 72 6f 64 75 63 74 49 44 20 3d 20 70 72 6f 64  ProductID = prod
4b70: 75 63 74 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  uctId;..        
4b80: 20 20 20 20 20 20 6e 65 77 4f 72 64 65 72 44 65        newOrderDe
4b90: 74 61 69 6c 73 2e 55 6e 69 74 50 72 69 63 65 20  tails.UnitPrice 
4ba0: 3d 20 28 64 65 63 69 6d 61 6c 29 31 2e 32 33 3b  = (decimal)1.23;
4bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4bc0: 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e  newOrderDetails.
4bd0: 51 75 61 6e 74 69 74 79 20 3d 20 31 3b 0d 0a 20  Quantity = 1;.. 
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
4bf0: 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 44 69 73  OrderDetails.Dis
4c00: 63 6f 75 6e 74 20 3d 20 30 2e 30 66 3b 0d 0a 0d  count = 0.0f;...
4c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
4c20: 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 4f  ewOrderDetails.O
4c30: 72 64 65 72 73 52 65 66 65 72 65 6e 63 65 2e 45  rdersReference.E
4c40: 6e 74 69 74 79 4b 65 79 20 3d 20 6e 65 77 20 45  ntityKey = new E
4c50: 6e 74 69 74 79 4b 65 79 28 0d 0a 20 20 20 20 20  ntityKey(..     
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
4c70: 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65  rthwindEFEntitie
4c80: 73 2e 4f 72 64 65 72 73 22 2c 0d 0a 20 20 20 20  s.Orders",..    
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
4ca0: 77 20 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73  w KeyValuePair<s
4cb0: 74 72 69 6e 67 2c 20 6f 62 6a 65 63 74 3e 5b 5d  tring, object>[]
4cc0: 20 7b 20 6f 72 64 65 72 49 64 50 61 69 72 20 7d   { orderIdPair }
4cd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4ce0: 20 20 20 20 6e 65 77 4f 72 64 65 72 44 65 74 61      newOrderDeta
4cf0: 69 6c 73 2e 50 72 6f 64 75 63 74 73 52 65 66 65  ils.ProductsRefe
4d00: 72 65 6e 63 65 2e 45 6e 74 69 74 79 4b 65 79 20  rence.EntityKey 
4d10: 3d 20 6e 65 77 20 45 6e 74 69 74 79 4b 65 79 28  = new EntityKey(
4d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d30: 20 20 20 20 22 6e 6f 72 74 68 77 69 6e 64 45 46      "northwindEF
4d40: 45 6e 74 69 74 69 65 73 2e 50 72 6f 64 75 63 74  Entities.Product
4d50: 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
4d60: 20 20 20 20 20 20 20 6e 65 77 20 4b 65 79 56 61         new KeyVa
4d70: 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  luePair<string, 
4d80: 6f 62 6a 65 63 74 3e 5b 5d 20 7b 20 70 72 6f 64  object>[] { prod
4d90: 75 63 74 49 64 50 61 69 72 20 7d 29 3b 0d 0a 0d  uctIdPair });...
4da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64  .              d
4db0: 62 2e 41 64 64 4f 62 6a 65 63 74 28 22 4f 72 64  b.AddObject("Ord
4dc0: 65 72 44 65 74 61 69 6c 73 22 2c 20 6e 65 77 4f  erDetails", newO
4dd0: 72 64 65 72 44 65 74 61 69 6c 73 29 3b 0d 0a 0d  rderDetails);...
4de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
4df0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
4e00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4e10: 20 20 20 20 20 20 20 64 62 2e 53 61 76 65 43 68         db.SaveCh
4e20: 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  anges();..      
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e              coun
4e40: 74 73 5b 30 5d 2b 2b 3b 0d 0a 20 20 20 20 20 20  ts[0]++;..      
4e50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4e60: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
4e70: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
4e80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ea0: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
4eb0: 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ne(e);..        
4ec0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4ed0: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f00: 20 20 20 64 62 2e 41 63 63 65 70 74 41 6c 6c 43     db.AcceptAllC
4f10: 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20  hanges();..     
4f20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
4f40: 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 22 69  ole.WriteLine("i
4f50: 6e 73 65 72 74 65 64 20 7b 30 7d 22 2c 20 63 6f  nserted {0}", co
4f60: 75 6e 74 73 5b 30 5d 29 3b 0d 0a 20 20 20 20 20  unts[0]);..     
4f70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4f80: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20      return 0;.. 
4f90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4fa0: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
4fb0: 45 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74 20  E: Used to test 
4fc0: 74 68 65 20 55 50 44 41 54 45 20 66 69 78 20 28  the UPDATE fix (
4fd0: 69 2e 65 2e 20 74 68 65 20 6d 69 73 73 69 6e 67  i.e. the missing
4fe0: 20 73 65 6d 69 2d 63 6f 6c 6f 6e 0d 0a 20 20 20   semi-colon..   
4ff0: 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 74     //       in t
5000: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
5010: 20 62 65 74 77 65 65 6e 20 74 68 65 20 61 63 74   between the act
5020: 75 61 6c 20 55 50 44 41 54 45 20 73 74 61 74 65  ual UPDATE state
5030: 6d 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f 20 20  ment..      //  
5040: 20 20 20 20 20 61 6e 64 20 74 68 65 20 66 6f 6c       and the fol
5050: 6c 6f 77 2d 75 70 20 53 45 4c 45 43 54 20 73 74  low-up SELECT st
5060: 61 74 65 6d 65 6e 74 29 2e 0d 0a 20 20 20 20 20  atement)...     
5070: 20 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61   //..      priva
5080: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 55 70  te static int Up
5090: 64 61 74 65 54 65 73 74 28 29 0d 0a 20 20 20 20  dateTest()..    
50a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c    {..          l
50b0: 6f 6e 67 5b 5d 20 6f 72 64 65 72 49 64 73 20 3d  ong[] orderIds =
50c0: 20 6e 65 77 20 6c 6f 6e 67 5b 5d 20 7b 0d 0a 20   new long[] {.. 
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0d 0a               0..
50e0: 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a            };....
50f0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
5100: 28 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69  (northwindEFEnti
5110: 74 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f  ties db = new no
5120: 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65  rthwindEFEntitie
5130: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s())..          
5140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5150: 20 69 6e 74 5b 5d 20 63 6f 75 6e 74 73 20 3d 20   int[] counts = 
5160: 7b 20 30 2c 20 30 20 7d 3b 0d 0a 0d 0a 20 20 20  { 0, 0 };....   
5170: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5190: 4e 4f 54 45 3a 20 2a 52 45 51 55 49 52 45 44 2a  NOTE: *REQUIRED*
51a0: 20 54 68 69 73 20 69 73 20 72 65 71 75 69 72 65   This is require
51b0: 64 20 73 6f 20 74 68 61 74 20 74 68 65 0d 0a 20  d so that the.. 
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
51d0: 20 20 20 20 20 20 45 6e 74 69 74 79 20 46 72 61        Entity Fra
51e0: 6d 65 77 6f 72 6b 20 69 73 20 70 72 65 76 65 6e  mework is preven
51f0: 74 65 64 20 66 72 6f 6d 20 6f 70 65 6e 69 6e 67  ted from opening
5200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5210: 2f 2f 20 20 20 20 20 20 20 6d 75 6c 74 69 70 6c  //       multipl
5220: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f  e connections to
5230: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
5240: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20  SQLite..        
5250: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
5260: 61 74 61 62 61 73 65 20 28 69 2e 65 2e 20 77 68  atabase (i.e. wh
5270: 69 63 68 20 77 6f 75 6c 64 20 72 65 73 75 6c 74  ich would result
5280: 20 69 6e 20 6d 75 6c 74 69 70 6c 65 0d 0a 20 20   in multiple..  
5290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
52a0: 20 20 20 20 20 49 4d 4d 45 44 49 41 54 45 20 74       IMMEDIATE t
52b0: 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 74 68 65  ransactions, the
52c0: 72 65 62 79 20 66 61 69 6c 69 6e 67 20 5b 6c 61  reby failing [la
52d0: 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ter..           
52e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e 5d 20     //       on] 
52f0: 77 69 74 68 20 6c 6f 63 6b 69 6e 67 20 65 72 72  with locking err
5300: 6f 72 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ors)...         
5310: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5320: 20 20 20 20 20 20 20 64 62 2e 43 6f 6e 6e 65 63         db.Connec
5330: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
5350: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
5360: 3b 20 69 6e 64 65 78 20 3c 20 6f 72 64 65 72 49  ; index < orderI
5370: 64 73 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78  ds.Length; index
5380: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
5390: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
53a0: 20 20 20 20 20 20 20 20 4f 72 64 65 72 73 20 6e          Orders n
53b0: 65 77 4f 72 64 65 72 73 20 3d 20 6e 65 77 20 4f  ewOrders = new O
53c0: 72 64 65 72 73 28 29 3b 0d 0a 0d 0a 20 20 20 20  rders();....    
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
53e0: 77 4f 72 64 65 72 73 2e 53 68 69 70 41 64 64 72  wOrders.ShipAddr
53f0: 65 73 73 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ess = String.For
5400: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
5410: 20 20 20 20 20 20 20 20 20 20 20 20 22 54 65 73              "Tes
5420: 74 20 4f 72 64 65 72 20 53 68 69 70 20 41 64 64  t Order Ship Add
5430: 72 65 73 73 2c 20 49 6e 64 65 78 20 23 7b 30 7d  ress, Index #{0}
5440: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
5450: 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 29            index)
5460: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5470: 20 20 20 20 20 20 20 64 62 2e 41 64 64 4f 62 6a         db.AddObj
5480: 65 63 74 28 22 4f 72 64 65 72 73 22 2c 20 6e 65  ect("Orders", ne
5490: 77 4f 72 64 65 72 73 29 3b 0d 0a 0d 0a 20 20 20  wOrders);....   
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
54b0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
54c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
54d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
54e0: 62 2e 53 61 76 65 43 68 61 6e 67 65 73 28 29 3b  b.SaveChanges();
54f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5500: 20 20 20 20 20 20 20 20 63 6f 75 6e 74 73 5b 30          counts[0
5510: 5d 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ]++;....        
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5530: 20 53 74 6f 72 65 47 65 6e 65 72 61 74 65 64 50   StoreGeneratedP
5540: 61 74 74 65 72 6e 3d 22 49 64 65 6e 74 69 74 79  attern="Identity
5550: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "..             
5560: 20 20 20 20 20 20 20 20 20 6f 72 64 65 72 49 64           orderId
5570: 73 5b 69 6e 64 65 78 5d 20 3d 20 6e 65 77 4f 72  s[index] = newOr
5580: 64 65 72 73 2e 4f 72 64 65 72 49 44 3b 0d 0a 0d  ders.OrderID;...
5590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
55a0: 20 20 20 20 20 20 20 2f 2f 20 53 74 6f 72 65 47         // StoreG
55b0: 65 6e 65 72 61 74 65 64 50 61 74 74 65 72 6e 3d  eneratedPattern=
55c0: 22 4e 6f 6e 65 22 0d 0a 20 20 20 20 20 20 20 20  "None"..        
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
55e0: 77 4f 72 64 65 72 73 2e 53 68 69 70 41 64 64 72  wOrders.ShipAddr
55f0: 65 73 73 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ess = String.For
5600: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5620: 22 4e 65 77 20 4f 72 64 65 72 20 53 68 69 70 20  "New Order Ship 
5630: 41 64 64 72 65 73 73 20 23 7b 30 7d 22 2c 0d 0a  Address #{0}",..
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5650: 20 20 20 20 20 20 20 20 20 20 6f 72 64 65 72 49            orderI
5660: 64 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20  ds[index]);.... 
5670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5680: 20 20 20 20 20 2f 2f 20 53 74 6f 72 65 47 65 6e       // StoreGen
5690: 65 72 61 74 65 64 50 61 74 74 65 72 6e 3d 22 43  eratedPattern="C
56a0: 6f 6d 70 75 74 65 64 22 0d 0a 20 20 20 20 20 20  omputed"..      
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56c0: 6e 65 77 4f 72 64 65 72 73 2e 46 72 65 69 67 68  newOrders.Freigh
56d0: 74 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 1;....      
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56f0: 64 62 2e 53 61 76 65 43 68 61 6e 67 65 73 28 29  db.SaveChanges()
5700: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5710: 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74 73 5b           counts[
5720: 31 5d 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  1]++;..         
5730: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
5750: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
5760: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5770: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
5790: 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
57a0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
57b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
57d0: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
57e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5800: 64 62 2e 41 63 63 65 70 74 41 6c 6c 43 68 61 6e  db.AcceptAllChan
5810: 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ges();..        
5820: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5830: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
5850: 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
5860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5870: 20 20 20 20 22 69 6e 73 65 72 74 65 64 20 7b 30      "inserted {0
5880: 7d 20 75 70 64 61 74 65 64 20 7b 31 7d 22 2c 20  } updated {1}", 
5890: 63 6f 75 6e 74 73 5b 30 5d 2c 20 63 6f 75 6e 74  counts[0], count
58a0: 73 5b 31 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20  s[1]);..        
58b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
58c0: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20   return 0;..    
58d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d    }....      //.
58e0: 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20  .      // NOTE: 
58f0: 55 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  Used to test the
5900: 20 42 69 6e 61 72 79 47 55 49 44 20 66 69 78 20   BinaryGUID fix 
5910: 28 69 2e 65 2e 20 42 4c 4f 42 20 6c 69 74 65 72  (i.e. BLOB liter
5920: 61 6c 20 66 6f 72 6d 61 74 74 69 6e 67 0d 0a 20  al formatting.. 
5930: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66       //       of
5940: 20 47 55 49 44 20 76 61 6c 75 65 73 20 77 68 65   GUID values whe
5950: 6e 20 74 68 65 20 42 69 6e 61 72 79 47 55 49 44  n the BinaryGUID
5960: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 70   connection prop
5970: 65 72 74 79 20 68 61 73 20 62 65 65 6e 0d 0a 20  erty has been.. 
5980: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 6e       //       en
5990: 61 62 6c 65 64 29 2e 0d 0a 20 20 20 20 20 20 2f  abled)...      /
59a0: 2f 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65  /..      private
59b0: 20 73 74 61 74 69 63 20 69 6e 74 20 42 69 6e 61   static int Bina
59c0: 72 79 47 75 69 64 54 65 73 74 28 62 6f 6f 6c 20  ryGuidTest(bool 
59d0: 62 69 6e 61 72 79 47 75 69 64 29 0d 0a 20 20 20  binaryGuid)..   
59e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
59f0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 65 74 45  Environment.SetE
5a00: 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62  nvironmentVariab
5a10: 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
5a20: 20 20 20 22 41 70 70 65 6e 64 4d 61 6e 69 66 65     "AppendManife
5a30: 73 74 54 6f 6b 65 6e 5f 53 51 4c 69 74 65 50 72  stToken_SQLitePr
5a40: 6f 76 69 64 65 72 4d 61 6e 69 66 65 73 74 22 2c  oviderManifest",
5a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a60: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 3b  String.Format(";
5a70: 42 69 6e 61 72 79 47 55 49 44 3d 7b 30 7d 3b 22  BinaryGUID={0};"
5a80: 2c 20 62 69 6e 61 72 79 47 75 69 64 29 29 3b 0d  , binaryGuid));.
5a90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  ...          usi
5aa0: 6e 67 20 28 6e 6f 72 74 68 77 69 6e 64 45 46 45  ng (northwindEFE
5ab0: 6e 74 69 74 69 65 73 20 64 62 20 3d 20 6e 65 77  ntities db = new
5ac0: 20 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69   northwindEFEnti
5ad0: 74 69 65 73 28 29 29 0d 0a 20 20 20 20 20 20 20  ties())..       
5ae0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5af0: 20 20 20 20 73 74 72 69 6e 67 20 73 71 6c 20 3d      string sql =
5b00: 20 22 53 45 4c 45 43 54 20 56 41 4c 55 45 20 47   "SELECT VALUE G
5b10: 55 49 44 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  UID " +..       
5b20: 20 20 20 20 20 20 20 20 20 20 20 22 27 32 64 33             "'2d3
5b30: 64 32 64 33 64 2d 32 64 33 64 2d 32 64 33 64 2d  d2d3d-2d3d-2d3d-
5b40: 32 64 33 64 2d 32 64 33 64 32 64 33 64 32 64 33  2d3d-2d3d2d3d2d3
5b50: 64 27 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  d' " +..        
5b60: 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d 20            "FROM 
5b70: 4f 72 64 65 72 73 20 41 53 20 6f 20 57 48 45 52  Orders AS o WHER
5b80: 45 20 6f 2e 4f 72 64 65 72 49 44 20 3d 20 31 30  E o.OrderID = 10
5b90: 32 34 38 3b 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  248;";....      
5ba0: 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 51 75          ObjectQu
5bb0: 65 72 79 3c 73 74 72 69 6e 67 3e 20 71 75 65 72  ery<string> quer
5bc0: 79 20 3d 20 64 62 2e 43 72 65 61 74 65 51 75 65  y = db.CreateQue
5bd0: 72 79 3c 73 74 72 69 6e 67 3e 28 73 71 6c 29 3b  ry<string>(sql);
5be0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5bf0: 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e    foreach (strin
5c00: 67 20 73 20 69 6e 20 71 75 65 72 79 29 0d 0a 20  g s in query).. 
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c20: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
5c30: 6e 65 28 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ne(s);..        
5c40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5c50: 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 65 74   Environment.Set
5c60: 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
5c70: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
5c80: 20 20 20 20 22 41 70 70 65 6e 64 4d 61 6e 69 66      "AppendManif
5c90: 65 73 74 54 6f 6b 65 6e 5f 53 51 4c 69 74 65 50  estToken_SQLiteP
5ca0: 72 6f 76 69 64 65 72 4d 61 6e 69 66 65 73 74 22  roviderManifest"
5cb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5cc0: 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   null);....     
5cd0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
5ce0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 4e        }....#if N
5cf0: 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20  ET_40 || NET_45 
5d00: 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45  || NET_451 || NE
5d10: 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20  T_452 || NET_46 
5d20: 7c 7c 20 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45  || NET_461 || NE
5d30: 54 5f 34 36 32 20 7c 7c 20 4e 45 54 5f 34 37 20  T_462 || NET_47 
5d40: 7c 7c 20 4e 45 54 5f 34 37 31 20 7c 7c 20 4e 45  || NET_471 || NE
5d50: 54 5f 34 37 32 20 7c 7c 20 4e 45 54 5f 53 54 41  T_472 || NET_STA
5d60: 4e 44 41 52 44 5f 32 31 0d 0a 20 20 20 20 20 20  NDARD_21..      
5d70: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
5d80: 45 3a 20 55 73 65 64 20 74 6f 20 74 65 73 74 20  E: Used to test 
5d90: 74 68 65 20 42 69 6e 61 72 79 47 55 49 44 20 63  the BinaryGUID c
5da0: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
5db0: 20 70 72 6f 70 65 72 74 79 20 77 69 74 68 0d 0a   property with..
5dc0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
5dd0: 68 65 20 43 6f 6e 74 61 69 6e 73 28 29 20 66 75  he Contains() fu
5de0: 6e 63 74 69 6f 6e 20 28 74 69 63 6b 65 74 20 5b  nction (ticket [
5df0: 61 34 64 39 63 37 65 65 39 34 5d 29 2e 20 20 57  a4d9c7ee94]).  W
5e00: 65 20 63 61 6e 6e 6f 74 0d 0a 20 20 20 20 20 20  e cannot..      
5e10: 2f 2f 20 20 20 20 20 20 20 75 73 65 20 74 68 65  //       use the
5e20: 20 43 6f 6e 74 61 69 6e 73 20 65 78 74 65 6e 73   Contains extens
5e30: 69 6f 6e 20 6d 65 74 68 6f 64 20 77 69 74 68 69  ion method withi
5e40: 6e 20 61 20 4c 49 4e 51 20 71 75 65 72 79 20 77  n a LINQ query w
5e50: 69 74 68 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  ith..      //   
5e60: 20 20 20 20 74 68 65 20 2e 4e 45 54 20 46 72 61      the .NET Fra
5e70: 6d 65 77 6f 72 6b 20 33 2e 35 2e 0d 0a 20 20 20  mework 3.5...   
5e80: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 70 72 69     //..      pri
5e90: 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
5ea0: 42 69 6e 61 72 79 47 75 69 64 54 65 73 74 32 28  BinaryGuidTest2(
5eb0: 62 6f 6f 6c 20 62 69 6e 61 72 79 47 75 69 64 29  bool binaryGuid)
5ec0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
5ed0: 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74       Environment
5ee0: 2e 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 56  .SetEnvironmentV
5ef0: 61 72 69 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  ariable(..      
5f00: 20 20 20 20 20 20 20 20 22 41 70 70 65 6e 64 4d          "AppendM
5f10: 61 6e 69 66 65 73 74 54 6f 6b 65 6e 5f 53 51 4c  anifestToken_SQL
5f20: 69 74 65 50 72 6f 76 69 64 65 72 4d 61 6e 69 66  iteProviderManif
5f30: 65 73 74 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  est",..         
5f40: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
5f50: 61 74 28 22 3b 42 69 6e 61 72 79 47 55 49 44 3d  at(";BinaryGUID=
5f60: 7b 30 7d 3b 22 2c 20 62 69 6e 61 72 79 47 75 69  {0};", binaryGui
5f70: 64 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d));....        
5f80: 20 20 75 73 69 6e 67 20 28 6e 6f 72 74 68 77 69    using (northwi
5f90: 6e 64 45 46 45 6e 74 69 74 69 65 73 20 64 62 20  ndEFEntities db 
5fa0: 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69 6e 64 45  = new northwindE
5fb0: 46 45 6e 74 69 74 69 65 73 28 29 29 0d 0a 20 20  FEntities())..  
5fc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5fd0: 20 20 20 20 20 20 20 20 20 47 75 69 64 20 67 75           Guid gu
5fe0: 69 64 20 3d 20 6e 65 77 20 47 75 69 64 28 22 32  id = new Guid("2
5ff0: 64 33 64 32 64 33 64 2d 32 64 33 64 2d 32 64 33  d3d2d3d-2d3d-2d3
6000: 64 2d 32 64 33 64 2d 32 64 33 64 32 64 33 64 32  d-2d3d-2d3d2d3d2
6010: 64 33 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  d3d");..        
6020: 20 20 20 20 20 20 47 75 69 64 5b 5d 20 67 75 69        Guid[] gui
6030: 64 73 20 3d 20 6e 65 77 20 47 75 69 64 5b 5d 20  ds = new Guid[] 
6040: 7b 20 67 75 69 64 20 7d 3b 0d 0a 0d 0a 20 20 20  { guid };....   
6050: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
6060: 6f 6e 63 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  once = false;.. 
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
6080: 20 71 75 65 72 79 20 3d 20 66 72 6f 6d 20 74 20   query = from t 
6090: 69 6e 20 64 62 2e 54 65 72 72 69 74 6f 72 69 65  in db.Territorie
60a0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65               whe
60c0: 72 65 20 67 75 69 64 73 2e 41 73 51 75 65 72 79  re guids.AsQuery
60d0: 61 62 6c 65 3c 47 75 69 64 3e 28 29 2e 43 6f 6e  able<Guid>().Con
60e0: 74 61 69 6e 73 3c 47 75 69 64 3e 28 67 75 69 64  tains<Guid>(guid
60f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6100: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 72 64               ord
6110: 65 72 62 79 20 74 2e 54 65 72 72 69 74 6f 72 79  erby t.Territory
6120: 49 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ID..            
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
6140: 6c 65 63 74 20 74 3b 0d 0a 0d 0a 20 20 20 20 20  lect t;....     
6150: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
6160: 20 28 54 65 72 72 69 74 6f 72 69 65 73 20 74 20   (Territories t 
6170: 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20  in query)..     
6180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
61a0: 20 28 6f 6e 63 65 29 0d 0a 20 20 20 20 20 20 20   (once)..       
61b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
61c0: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27  onsole.Write(' '
61d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
61e0: 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
61f0: 57 72 69 74 65 28 74 2e 54 65 72 72 69 74 6f 72  Write(t.Territor
6200: 79 49 44 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  yID);....       
6210: 20 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20             once 
6220: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
6230: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6250: 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53     Environment.S
6260: 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  etEnvironmentVar
6270: 69 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  iable(..        
6280: 20 20 20 20 20 20 22 41 70 70 65 6e 64 4d 61 6e        "AppendMan
6290: 69 66 65 73 74 54 6f 6b 65 6e 5f 53 51 4c 69 74  ifestToken_SQLit
62a0: 65 50 72 6f 76 69 64 65 72 4d 61 6e 69 66 65 73  eProviderManifes
62b0: 74 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t",..           
62c0: 20 20 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20     null);....   
62d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
62e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69  ..      }..#endi
62f0: 66 0d 0a 0d 0a 20 20 20 20 20 20 70 72 69 76 61  f....      priva
6300: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 43 6f  te static int Co
6310: 6d 70 6c 65 78 50 72 69 6d 61 72 79 4b 65 79 54  mplexPrimaryKeyT
6320: 65 73 74 28 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  est()..      {..
6330: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
6340: 28 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69  (northwindEFEnti
6350: 74 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f  ties db = new no
6360: 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65  rthwindEFEntitie
6370: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s())..          
6380: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6390: 20 6c 6f 6e 67 20 6f 72 64 65 72 49 64 20 3d 20   long orderId = 
63a0: 31 30 32 34 38 3b 0d 0a 20 20 20 20 20 20 20 20  10248;..        
63b0: 20 20 20 20 20 20 6c 6f 6e 67 20 70 72 6f 64 75        long produ
63c0: 63 74 49 64 20 3d 20 31 3b 0d 0a 20 20 20 20 20  ctId = 1;..     
63d0: 20 20 20 20 20 20 20 20 20 69 6e 74 5b 5d 20 63           int[] c
63e0: 6f 75 6e 74 73 20 3d 20 7b 20 30 2c 20 30 20 7d  ounts = { 0, 0 }
63f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6400: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
6410: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 52       // NOTE: *R
6420: 45 51 55 49 52 45 44 2a 20 54 68 69 73 20 69 73  EQUIRED* This is
6430: 20 72 65 71 75 69 72 65 64 20 73 6f 20 74 68 61   required so tha
6440: 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  t the..         
6450: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 45 6e       //       En
6460: 74 69 74 79 20 46 72 61 6d 65 77 6f 72 6b 20 69  tity Framework i
6470: 73 20 70 72 65 76 65 6e 74 65 64 20 66 72 6f 6d  s prevented from
6480: 20 6f 70 65 6e 69 6e 67 0d 0a 20 20 20 20 20 20   opening..      
6490: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
64a0: 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 6e 65 63   multiple connec
64b0: 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 75 6e 64  tions to the und
64c0: 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 0d 0a  erlying SQLite..
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
64e0: 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database 
64f0: 28 69 2e 65 2e 20 77 68 69 63 68 20 77 6f 75 6c  (i.e. which woul
6500: 64 20 72 65 73 75 6c 74 20 69 6e 20 6d 75 6c 74  d result in mult
6510: 69 70 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  iple..          
6520: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 4d 4d      //       IMM
6530: 45 44 49 41 54 45 20 74 72 61 6e 73 61 63 74 69  EDIATE transacti
6540: 6f 6e 73 2c 20 74 68 65 72 65 62 79 20 66 61 69  ons, thereby fai
6550: 6c 69 6e 67 20 5b 6c 61 74 65 72 0d 0a 20 20 20  ling [later..   
6560: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
6570: 20 20 20 20 6f 6e 5d 20 77 69 74 68 20 6c 6f 63      on] with loc
6580: 6b 69 6e 67 20 65 72 72 6f 72 73 29 2e 0d 0a 20  king errors)... 
6590: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
65a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64  .              d
65b0: 62 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65  b.Connection.Ope
65c0: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
65d0: 20 20 20 20 20 20 4b 65 79 56 61 6c 75 65 50 61        KeyValuePa
65e0: 69 72 3c 73 74 72 69 6e 67 2c 20 6f 62 6a 65 63  ir<string, objec
65f0: 74 3e 20 6f 72 64 65 72 49 64 50 61 69 72 20 3d  t> orderIdPair =
6600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6610: 20 20 20 20 6e 65 77 20 4b 65 79 56 61 6c 75 65      new KeyValue
6620: 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 6f 62 6a  Pair<string, obj
6630: 65 63 74 3e 28 22 4f 72 64 65 72 49 44 22 2c 20  ect>("OrderID", 
6640: 6f 72 64 65 72 49 64 29 3b 0d 0a 0d 0a 20 20 20  orderId);....   
6650: 20 20 20 20 20 20 20 20 20 20 20 4b 65 79 56 61             KeyVa
6660: 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  luePair<string, 
6670: 6f 62 6a 65 63 74 3e 20 70 72 6f 64 75 63 74 49  object> productI
6680: 64 50 61 69 72 20 3d 0d 0a 20 20 20 20 20 20 20  dPair =..       
6690: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4b             new K
66a0: 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69  eyValuePair<stri
66b0: 6e 67 2c 20 6f 62 6a 65 63 74 3e 28 22 50 72 6f  ng, object>("Pro
66c0: 64 75 63 74 49 44 22 2c 20 70 72 6f 64 75 63 74  ductID", product
66d0: 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Id);....        
66e0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
66f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6720: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6730: 20 20 20 20 20 20 20 20 20 4f 72 64 65 72 44 65           OrderDe
6740: 74 61 69 6c 73 20 6e 65 77 4f 72 64 65 72 44 65  tails newOrderDe
6750: 74 61 69 6c 73 20 3d 20 6e 65 77 20 4f 72 64 65  tails = new Orde
6760: 72 44 65 74 61 69 6c 73 28 29 3b 0d 0a 0d 0a 20  rDetails();.... 
6770: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
6780: 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 4f 72 64  OrderDetails.Ord
6790: 65 72 49 44 20 3d 20 6f 72 64 65 72 49 64 3b 0d  erID = orderId;.
67a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
67b0: 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 50  ewOrderDetails.P
67c0: 72 6f 64 75 63 74 49 44 20 3d 20 70 72 6f 64 75  roductID = produ
67d0: 63 74 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ctId;..         
67e0: 20 20 20 20 20 6e 65 77 4f 72 64 65 72 44 65 74       newOrderDet
67f0: 61 69 6c 73 2e 55 6e 69 74 50 72 69 63 65 20 3d  ails.UnitPrice =
6800: 20 28 64 65 63 69 6d 61 6c 29 31 2e 32 33 3b 0d   (decimal)1.23;.
6810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
6820: 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 51  ewOrderDetails.Q
6830: 75 61 6e 74 69 74 79 20 3d 20 31 3b 0d 0a 20 20  uantity = 1;..  
6840: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4f              newO
6850: 72 64 65 72 44 65 74 61 69 6c 73 2e 44 69 73 63  rderDetails.Disc
6860: 6f 75 6e 74 20 3d 20 30 2e 30 66 3b 0d 0a 0d 0a  ount = 0.0f;....
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
6880: 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 4f 72  wOrderDetails.Or
6890: 64 65 72 73 52 65 66 65 72 65 6e 63 65 2e 45 6e  dersReference.En
68a0: 74 69 74 79 4b 65 79 20 3d 20 6e 65 77 20 45 6e  tityKey = new En
68b0: 74 69 74 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  tityKey(..      
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 72              "nor
68d0: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
68e0: 2e 4f 72 64 65 72 73 22 2c 0d 0a 20 20 20 20 20  .Orders",..     
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
6900: 20 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74   KeyValuePair<st
6910: 72 69 6e 67 2c 20 6f 62 6a 65 63 74 3e 5b 5d 20  ring, object>[] 
6920: 7b 20 6f 72 64 65 72 49 64 50 61 69 72 20 7d 29  { orderIdPair })
6930: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6940: 20 20 20 6e 65 77 4f 72 64 65 72 44 65 74 61 69     newOrderDetai
6950: 6c 73 2e 50 72 6f 64 75 63 74 73 52 65 66 65 72  ls.ProductsRefer
6960: 65 6e 63 65 2e 45 6e 74 69 74 79 4b 65 79 20 3d  ence.EntityKey =
6970: 20 6e 65 77 20 45 6e 74 69 74 79 4b 65 79 28 0d   new EntityKey(.
6980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6990: 20 20 20 22 6e 6f 72 74 68 77 69 6e 64 45 46 45     "northwindEFE
69a0: 6e 74 69 74 69 65 73 2e 50 72 6f 64 75 63 74 73  ntities.Products
69b0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
69c0: 20 20 20 20 20 20 6e 65 77 20 4b 65 79 56 61 6c        new KeyVal
69d0: 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 6f  uePair<string, o
69e0: 62 6a 65 63 74 3e 5b 5d 20 7b 20 70 72 6f 64 75  bject>[] { produ
69f0: 63 74 49 64 50 61 69 72 20 7d 29 3b 0d 0a 0d 0a  ctIdPair });....
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
6a10: 2e 41 64 64 4f 62 6a 65 63 74 28 22 4f 72 64 65  .AddObject("Orde
6a20: 72 44 65 74 61 69 6c 73 22 2c 20 6e 65 77 4f 72  rDetails", newOr
6a30: 64 65 72 44 65 74 61 69 6c 73 29 3b 0d 0a 0d 0a  derDetails);....
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
6a50: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
6a60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6a70: 20 20 20 20 20 20 64 62 2e 53 61 76 65 43 68 61        db.SaveCha
6a80: 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  nges();..       
6a90: 20 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74             count
6aa0: 73 5b 30 5d 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  s[0]++;..       
6ab0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6ac0: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
6ad0: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
6ae0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b00: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e  Console.WriteLin
6b10: 65 28 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  e(e);..         
6b20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6b30: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b60: 20 20 64 62 2e 41 63 63 65 70 74 41 6c 6c 43 68    db.AcceptAllCh
6b70: 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  anges();..      
6b80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6b90: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6bc0: 20 20 20 64 62 2e 52 65 66 72 65 73 68 28 52 65     db.Refresh(Re
6bd0: 66 72 65 73 68 4d 6f 64 65 2e 53 74 6f 72 65 57  freshMode.StoreW
6be0: 69 6e 73 2c 20 6e 65 77 4f 72 64 65 72 44 65 74  ins, newOrderDet
6bf0: 61 69 6c 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ails);..        
6c00: 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74 73            counts
6c10: 5b 30 5d 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  [0]++;..        
6c20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6c30: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
6c40: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
6c50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6c70: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65  onsole.WriteLine
6c80: 28 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  (e);..          
6c90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6ca0: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
6cb0: 72 69 74 65 4c 69 6e 65 28 22 69 6e 73 65 72 74  riteLine("insert
6cc0: 65 64 20 7b 30 7d 22 2c 20 63 6f 75 6e 74 73 5b  ed {0}", counts[
6cd0: 30 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  0]);....        
6ce0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d20: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6d30: 20 20 20 20 20 20 20 20 20 6e 65 77 4f 72 64 65           newOrde
6d40: 72 44 65 74 61 69 6c 73 2e 55 6e 69 74 50 72 69  rDetails.UnitPri
6d50: 63 65 20 3d 20 28 64 65 63 69 6d 61 6c 29 32 2e  ce = (decimal)2.
6d60: 33 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  34;..           
6d70: 20 20 20 6e 65 77 4f 72 64 65 72 44 65 74 61 69     newOrderDetai
6d80: 6c 73 2e 51 75 61 6e 74 69 74 79 20 3d 20 32 3b  ls.Quantity = 2;
6d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6da0: 6e 65 77 4f 72 64 65 72 44 65 74 61 69 6c 73 2e  newOrderDetails.
6db0: 44 69 73 63 6f 75 6e 74 20 3d 20 30 2e 31 66 3b  Discount = 0.1f;
6dc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6dd0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
6de0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6df0: 20 20 20 20 20 20 20 20 20 20 64 62 2e 53 61 76            db.Sav
6e00: 65 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20  eChanges();..   
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6e20: 6f 75 6e 74 73 5b 31 5d 2b 2b 3b 0d 0a 20 20 20  ounts[1]++;..   
6e30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
6e50: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
6e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
6e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e80: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
6e90: 65 4c 69 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20  eLine(e);..     
6ea0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6eb0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
6ec0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
6ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6ee0: 20 20 20 20 20 20 64 62 2e 41 63 63 65 70 74 41        db.AcceptA
6ef0: 6c 6c 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20  llChanges();..  
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
6f20: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
6f30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6f40: 20 20 20 20 20 20 20 64 62 2e 52 65 66 72 65 73         db.Refres
6f50: 68 28 52 65 66 72 65 73 68 4d 6f 64 65 2e 53 74  h(RefreshMode.St
6f60: 6f 72 65 57 69 6e 73 2c 20 6e 65 77 4f 72 64 65  oreWins, newOrde
6f70: 72 44 65 74 61 69 6c 73 29 3b 0d 0a 20 20 20 20  rDetails);..    
6f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
6f90: 75 6e 74 73 5b 31 5d 2b 2b 3b 0d 0a 20 20 20 20  unts[1]++;..    
6fa0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6fb0: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
6fc0: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ff0: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
7000: 4c 69 6e 65 28 65 29 3b 0d 0a 20 20 20 20 20 20  Line(e);..      
7010: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7020: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
7030: 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 22 75 70  le.WriteLine("up
7040: 64 61 74 65 64 20 7b 30 7d 22 2c 20 63 6f 75 6e  dated {0}", coun
7050: 74 73 5b 31 5d 29 3b 0d 0a 20 20 20 20 20 20 20  ts[1]);..       
7060: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7070: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20    return 0;..   
7080: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 70 72     }....      pr
7090: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
70a0: 20 44 61 74 65 54 69 6d 65 54 65 73 74 28 29 0d   DateTimeTest().
70b0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
70c0: 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72 74 68      using (north
70d0: 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 20 64  windEFEntities d
70e0: 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69 6e  b = new northwin
70f0: 64 45 46 45 6e 74 69 74 69 65 73 28 29 29 0d 0a  dEFEntities())..
7100: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7110: 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54             DateT
7120: 69 6d 65 20 64 61 74 65 54 69 6d 65 20 3d 20 6e  ime dateTime = n
7130: 65 77 20 44 61 74 65 54 69 6d 65 28 31 39 39 37  ew DateTime(1997
7140: 2c 20 31 2c 20 31 2c 20 30 2c 20 30 2c 20 30 2c  , 1, 1, 0, 0, 0,
7150: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f   DateTimeKind.Lo
7160: 63 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  cal);..         
7170: 20 20 20 20 20 69 6e 74 20 63 31 20 3d 20 64 62       int c1 = db
7180: 2e 4f 72 64 65 72 73 2e 57 68 65 72 65 28 69 20  .Orders.Where(i 
7190: 3d 3e 20 69 2e 4f 72 64 65 72 44 61 74 65 20 3d  => i.OrderDate =
71a0: 3d 20 6e 65 77 20 44 61 74 65 54 69 6d 65 28 31  = new DateTime(1
71b0: 39 39 37 2c 20 31 2c 20 31 2c 20 30 2c 20 30 2c  997, 1, 1, 0, 0,
71c0: 20 30 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   0, DateTimeKind
71d0: 2e 4c 6f 63 61 6c 29 29 2e 43 6f 75 6e 74 28 29  .Local)).Count()
71e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
71f0: 20 69 6e 74 20 63 32 20 3d 20 64 62 2e 4f 72 64   int c2 = db.Ord
7200: 65 72 73 2e 57 68 65 72 65 28 69 20 3d 3e 20 69  ers.Where(i => i
7210: 2e 4f 72 64 65 72 44 61 74 65 20 3d 3d 20 64 61  .OrderDate == da
7220: 74 65 54 69 6d 65 29 2e 43 6f 75 6e 74 28 29 3b  teTime).Count();
7230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7240: 72 65 74 75 72 6e 20 63 31 20 3d 3d 20 63 32 20  return c1 == c2 
7250: 3f 20 30 20 3a 20 31 3b 0d 0a 20 20 20 20 20 20  ? 0 : 1;..      
7260: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
7270: 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65 20  ..      private 
7280: 73 74 61 74 69 63 20 76 6f 69 64 20 44 61 74 65  static void Date
7290: 54 69 6d 65 54 65 73 74 32 28 0d 0a 20 20 20 20  TimeTest2(..    
72a0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
72b0: 65 54 69 6d 65 46 6f 72 6d 61 74 0d 0a 20 20 20  eTimeFormat..   
72c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
72d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61  {..          Tra
72e0: 63 65 4c 69 73 74 65 6e 65 72 20 6c 69 73 74 65  ceListener liste
72f0: 6e 65 72 20 3d 20 6e 65 77 20 43 6f 6e 73 6f 6c  ner = new Consol
7300: 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29  eTraceListener()
7310: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 54  ;....          T
7320: 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41  race.Listeners.A
7330: 64 64 28 6c 69 73 74 65 6e 65 72 29 3b 0d 0a 20  dd(listener);.. 
7340: 20 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f 6e           Environ
7350: 6d 65 6e 74 2e 53 65 74 45 6e 76 69 72 6f 6e 6d  ment.SetEnvironm
7360: 65 6e 74 56 61 72 69 61 62 6c 65 28 22 53 51 4c  entVariable("SQL
7370: 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70  ite_ForceLogPrep
7380: 61 72 65 22 2c 20 22 31 22 29 3b 0d 0a 0d 0a 20  are", "1");.... 
7390: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74           if (dat
73a0: 65 54 69 6d 65 46 6f 72 6d 61 74 20 21 3d 20 6e  eTimeFormat != n
73b0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
73c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
73d0: 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 65 74   Environment.Set
73e0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
73f0: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
7400: 20 20 20 20 20 20 20 20 22 41 70 70 65 6e 64 4d          "AppendM
7410: 61 6e 69 66 65 73 74 54 6f 6b 65 6e 5f 53 51 4c  anifestToken_SQL
7420: 69 74 65 50 72 6f 76 69 64 65 72 4d 61 6e 69 66  iteProviderManif
7430: 65 73 74 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  est",..         
7440: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
7450: 46 6f 72 6d 61 74 28 22 3b 44 61 74 65 54 69 6d  Format(";DateTim
7460: 65 46 6f 72 6d 61 74 3d 7b 30 7d 3b 22 2c 20 64  eFormat={0};", d
7470: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 29 29 3b  ateTimeFormat));
7480: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
7490: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
74a0: 20 28 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74   (northwindEFEnt
74b0: 69 74 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e  ities db = new n
74c0: 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69  orthwindEFEntiti
74d0: 65 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  es())..         
74e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
74f0: 20 20 64 62 2e 4f 72 64 65 72 73 2e 57 68 65 72    db.Orders.Wher
7500: 65 28 69 20 3d 3e 20 69 2e 4f 72 64 65 72 44 61  e(i => i.OrderDa
7510: 74 65 20 3c 0d 0a 20 20 20 20 20 20 20 20 20 20  te <..          
7520: 20 20 20 20 20 20 20 20 6e 65 77 20 44 61 74 65          new Date
7530: 54 69 6d 65 28 31 39 39 37 2c 20 31 2c 20 31 2c  Time(1997, 1, 1,
7540: 20 30 2c 20 30 2c 20 30 2c 20 44 61 74 65 54 69   0, 0, 0, DateTi
7550: 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c 29 29 2e 43  meKind.Local)).C
7560: 6f 75 6e 74 28 29 3b 0d 0a 20 20 20 20 20 20 20  ount();..       
7570: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7580: 20 20 69 66 20 28 64 61 74 65 54 69 6d 65 46 6f    if (dateTimeFo
7590: 72 6d 61 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  rmat != null).. 
75a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
75b0: 20 20 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f            Enviro
75c0: 6e 6d 65 6e 74 2e 53 65 74 45 6e 76 69 72 6f 6e  nment.SetEnviron
75d0: 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 0d 0a 20  mentVariable(.. 
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 22 41 70 70 65 6e 64 4d 61 6e 69 66 65 73 74   "AppendManifest
7600: 54 6f 6b 65 6e 5f 53 51 4c 69 74 65 50 72 6f 76  Token_SQLiteProv
7610: 69 64 65 72 4d 61 6e 69 66 65 73 74 22 2c 0d 0a  iderManifest",..
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7630: 20 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20    null);..      
7640: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7650: 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53     Environment.S
7660: 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  etEnvironmentVar
7670: 69 61 62 6c 65 28 22 53 51 4c 69 74 65 5f 46 6f  iable("SQLite_Fo
7680: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 2c 20  rceLogPrepare", 
7690: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
76a0: 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72    Trace.Listener
76b0: 73 2e 52 65 6d 6f 76 65 28 6c 69 73 74 65 6e 65  s.Remove(listene
76c0: 72 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  r);..      }....
76d0: 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45  #if NET_40 || NE
76e0: 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20  T_45 || NET_451 
76f0: 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45  || NET_452 || NE
7700: 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31 20  T_46 || NET_461 
7710: 7c 7c 20 4e 45 54 5f 34 36 32 20 7c 7c 20 4e 45  || NET_462 || NE
7720: 54 5f 34 37 20 7c 7c 20 4e 45 54 5f 34 37 31 20  T_47 || NET_471 
7730: 7c 7c 20 4e 45 54 5f 34 37 32 20 7c 7c 20 4e 45  || NET_472 || NE
7740: 54 5f 53 54 41 4e 44 41 52 44 5f 32 31 0d 0a 20  T_STANDARD_21.. 
7750: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f       //..      /
7760: 2f 20 4e 4f 54 45 3a 20 55 73 65 64 20 74 6f 20  / NOTE: Used to 
7770: 74 65 73 74 20 74 68 65 20 52 4f 55 4e 44 20 66  test the ROUND f
7780: 69 78 20 28 69 2e 65 2e 20 62 65 69 6e 67 20 61  ix (i.e. being a
7790: 62 6c 65 20 74 6f 20 70 72 6f 70 65 72 6c 79 20  ble to properly 
77a0: 68 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 2f 2f  handle..      //
77b0: 20 20 20 20 20 20 20 74 68 65 20 74 77 6f 20 61         the two a
77c0: 72 67 75 6d 65 6e 74 20 66 6f 72 6d 29 2e 0d 0a  rgument form)...
77d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
77e0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
77f0: 6e 74 20 52 6f 75 6e 64 54 65 73 74 28 29 0d 0a  nt RoundTest()..
7800: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7810: 20 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72 74       using (nort
7820: 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73 20  hwindEFEntities 
7830: 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69  db = new northwi
7840: 6e 64 45 46 45 6e 74 69 74 69 65 73 28 29 29 0d  ndEFEntities()).
7850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7870: 62 6f 6f 6c 20 6f 6e 63 65 20 3d 20 66 61 6c 73  bool once = fals
7880: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
7890: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 69        foreach (i
78a0: 6e 74 5b 5d 20 69 20 69 6e 20 6e 65 77 20 69 6e  nt[] i in new in
78b0: 74 5b 5d 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  t[][] {..       
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 20 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 31 30 35   new int[] { 105
78e0: 30 33 2c 20 36 35 20 7d 2c 0d 0a 20 20 20 20 20  03, 65 },..     
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7900: 20 20 20 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 31     new int[] { 1
7910: 30 35 30 33 2c 20 31 34 20 7d 2c 0d 0a 20 20 20  0503, 14 },..   
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 20 20 20 20 20 6e 65 77 20 69 6e 74 5b 5d 20 7b       new int[] {
7940: 20 31 30 36 33 35 2c 20 35 20 7d 0d 0a 20 20 20   10635, 5 }..   
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 20 7d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   })..           
7970: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7980: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
7990: 28 69 6e 74 20 6a 20 3d 20 30 3b 20 6a 20 3c 20  (int j = 0; j < 
79a0: 33 3b 20 6a 2b 2b 29 0d 0a 20 20 20 20 20 20 20  3; j++)..       
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79d0: 20 20 20 20 20 20 20 20 69 6e 74 20 6f 69 64 20          int oid 
79e0: 3d 20 69 5b 30 5d 3b 0d 0a 20 20 20 20 20 20 20  = i[0];..       
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a00: 20 69 6e 74 20 70 69 64 20 3d 20 69 5b 31 5d 3b   int pid = i[1];
7a10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
7a30: 71 75 65 72 79 20 3d 20 66 72 6f 6d 20 6f 20 69  query = from o i
7a40: 6e 20 64 62 2e 4f 72 64 65 72 44 65 74 61 69 6c  n db.OrderDetail
7a50: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
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 77 68 65 72 65 20 6f 2e 4f         where o.O
7a80: 72 64 65 72 49 44 20 3d 3d 20 6f 69 64 20 26 26  rderID == oid &&
7a90: 20 6f 2e 50 72 6f 64 75 63 74 49 44 20 3d 3d 20   o.ProductID == 
7aa0: 70 69 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pid..           
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 20 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 20           select 
7ad0: 6e 65 77 20 7b 20 4e 65 77 55 6e 69 74 50 72 69  new { NewUnitPri
7ae0: 63 65 20 3d 20 4d 61 74 68 2e 52 6f 75 6e 64 28  ce = Math.Round(
7af0: 6f 2e 55 6e 69 74 50 72 69 63 65 2c 20 6a 29 20  o.UnitPrice, j) 
7b00: 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
7b20: 72 65 61 63 68 20 28 6f 62 6a 65 63 74 20 6f 20  reach (object o 
7b30: 69 6e 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20  in query)..     
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b70: 20 20 69 66 20 28 6f 6e 63 65 29 0d 0a 20 20 20    if (once)..   
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
7ba0: 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27 29 3b  sole.Write(' ');
7bb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bd0: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 22 7b  Console.Write("{
7be0: 30 7d 22 2c 20 6f 29 3b 0d 0a 0d 0a 20 20 20 20  0}", o);....    
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c00: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 74          once = t
7c10: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7c50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7c60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7c70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30          return 0
7c80: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  ;..      }..#end
7c90: 69 66 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74  if....    privat
7ca0: 65 20 73 74 61 74 69 63 20 69 6e 74 20 4f 6c 64  e static int Old
7cb0: 54 65 73 74 73 28 29 0d 0a 20 20 20 20 7b 0d 0a  Tests()..    {..
7cc0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 6e 6f 72        using (nor
7cd0: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
7ce0: 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77   db = new northw
7cf0: 69 6e 64 45 46 45 6e 74 69 74 69 65 73 28 29 29  indEFEntities())
7d00: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
7d10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7d20: 73 74 72 69 6e 67 20 65 6e 74 69 74 79 53 51 4c  string entitySQL
7d30: 20 3d 20 22 53 45 4c 45 43 54 20 56 41 4c 55 45   = "SELECT VALUE
7d40: 20 6f 20 46 52 4f 4d 20 4f 72 64 65 72 73 20 41   o FROM Orders A
7d50: 53 20 6f 20 57 48 45 52 45 20 53 51 4c 69 74 65  S o WHERE SQLite
7d60: 2e 44 61 74 65 50 61 72 74 28 27 79 79 79 79 27  .DatePart('yyyy'
7d70: 2c 20 6f 2e 4f 72 64 65 72 44 61 74 65 29 20 3d  , o.OrderDate) =
7d80: 20 31 39 39 37 20 4f 52 44 45 52 20 42 59 20 6f   1997 ORDER BY o
7d90: 2e 4f 72 64 65 72 49 44 3b 22 3b 0d 0a 20 20 20  .OrderID;";..   
7da0: 20 20 20 20 20 20 20 4f 62 6a 65 63 74 51 75 65         ObjectQue
7db0: 72 79 3c 4f 72 64 65 72 73 3e 20 71 75 65 72 79  ry<Orders> query
7dc0: 20 3d 20 64 62 2e 43 72 65 61 74 65 51 75 65 72   = db.CreateQuer
7dd0: 79 3c 4f 72 64 65 72 73 3e 28 65 6e 74 69 74 79  y<Orders>(entity
7de0: 53 51 4c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  SQL);....       
7df0: 20 20 20 66 6f 72 65 61 63 68 20 28 4f 72 64 65     foreach (Orde
7e00: 72 73 20 6f 20 69 6e 20 71 75 65 72 79 29 0d 0a  rs o in query)..
7e10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7e20: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
7e30: 2e 57 72 69 74 65 4c 69 6e 65 28 6f 2e 53 68 69  .WriteLine(o.Shi
7e40: 70 50 6f 73 74 61 6c 43 6f 64 65 29 3b 0d 0a 20  pPostalCode);.. 
7e50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7e60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7e70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 76 61   {..          va
7e80: 72 20 71 75 65 72 79 20 3d 20 66 72 6f 6d 20 63  r query = from c
7e90: 20 69 6e 20 64 62 2e 43 75 73 74 6f 6d 65 72 73   in db.Customers
7ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7eb0: 20 20 20 20 20 20 20 20 77 68 65 72 65 20 63 2e          where c.
7ec0: 43 69 74 79 20 3d 3d 20 22 4c 6f 6e 64 6f 6e 22  City == "London"
7ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ee0: 20 20 20 20 20 20 20 20 6f 72 64 65 72 62 79 20          orderby 
7ef0: 63 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 0d 0a 20  c.CompanyName.. 
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 20 20 20 73 65 6c 65 63 74 20 63 3b 0d 0a       select c;..
7f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
7f30: 63 63 20 3d 20 71 75 65 72 79 2e 43 6f 75 6e 74  cc = query.Count
7f40: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
7f50: 20 66 6f 72 65 61 63 68 20 28 43 75 73 74 6f 6d   foreach (Custom
7f60: 65 72 73 20 63 20 69 6e 20 71 75 65 72 79 29 0d  ers c in query).
7f70: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
7f80: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
7f90: 65 2e 57 72 69 74 65 4c 69 6e 65 28 63 2e 43 6f  e.WriteLine(c.Co
7fa0: 6d 70 61 6e 79 4e 61 6d 65 29 3b 0d 0a 20 20 20  mpanyName);..   
7fb0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7fc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 7b    }....        {
7fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
7fe0: 6e 67 20 73 63 69 74 79 20 3d 20 22 4c 6f 6e 64  ng scity = "Lond
7ff0: 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
8000: 43 75 73 74 6f 6d 65 72 73 20 63 20 3d 20 64 62  Customers c = db
8010: 2e 43 75 73 74 6f 6d 65 72 73 2e 46 69 72 73 74  .Customers.First
8020: 4f 72 44 65 66 61 75 6c 74 28 63 64 20 3d 3e 20  OrDefault(cd => 
8030: 63 64 2e 43 69 74 79 20 3d 3d 20 73 63 69 74 79  cd.City == scity
8040: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 43 6f  );..          Co
8050: 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
8060: 63 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 3b 0d  c.CompanyName);.
8070: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
8080: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8090: 20 20 20 44 61 74 65 54 69 6d 65 20 64 74 20 3d     DateTime dt =
80a0: 20 6e 65 77 20 44 61 74 65 54 69 6d 65 28 31 39   new DateTime(19
80b0: 39 37 2c 20 31 2c 20 31 29 3b 0d 0a 20 20 20 20  97, 1, 1);..    
80c0: 20 20 20 20 20 20 76 61 72 20 71 75 65 72 79 20        var query 
80d0: 3d 20 66 72 6f 6d 20 6f 72 64 65 72 20 69 6e 20  = from order in 
80e0: 64 62 2e 4f 72 64 65 72 73 0d 0a 20 20 20 20 20  db.Orders..     
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8100: 20 77 68 65 72 65 20 6f 72 64 65 72 2e 4f 72 64   where order.Ord
8110: 65 72 44 61 74 65 20 3c 20 64 74 0d 0a 20 20 20  erDate < dt..   
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8130: 20 20 20 6f 72 64 65 72 62 79 20 6f 72 64 65 72     orderby order
8140: 2e 4f 72 64 65 72 49 44 0d 0a 20 20 20 20 20 20  .OrderID..      
8150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8160: 73 65 6c 65 63 74 20 6f 72 64 65 72 3b 0d 0a 0d  select order;...
8170: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
8180: 63 68 20 28 4f 72 64 65 72 73 20 6f 20 69 6e 20  ch (Orders o in 
8190: 71 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20  query)..        
81a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81b0: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
81c0: 6e 65 28 6f 2e 4f 72 64 65 72 44 61 74 65 2e 54  ne(o.OrderDate.T
81d0: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
81e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
81f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 7b    }....        {
8200: 0d 0a 20 20 20 20 20 20 20 20 20 20 43 61 74 65  ..          Cate
8210: 67 6f 72 69 65 73 20 63 20 3d 20 6e 65 77 20 43  gories c = new C
8220: 61 74 65 67 6f 72 69 65 73 28 29 3b 0d 0a 20 20  ategories();..  
8230: 20 20 20 20 20 20 20 20 63 2e 43 61 74 65 67 6f          c.Catego
8240: 72 79 4e 61 6d 65 20 3d 20 22 54 65 73 74 20 43  ryName = "Test C
8250: 61 74 65 67 6f 72 79 22 3b 0d 0a 20 20 20 20 20  ategory";..     
8260: 20 20 20 20 20 63 2e 44 65 73 63 72 69 70 74 69       c.Descripti
8270: 6f 6e 20 3d 20 22 4d 79 20 44 65 73 63 72 69 70  on = "My Descrip
8280: 74 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  tion";..        
8290: 20 20 64 62 2e 41 64 64 54 6f 43 61 74 65 67 6f    db.AddToCatego
82a0: 72 69 65 73 28 63 29 3b 0d 0a 20 20 20 20 20 20  ries(c);..      
82b0: 20 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e 67      db.SaveChang
82c0: 65 73 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  es();....       
82d0: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
82e0: 4c 69 6e 65 28 63 2e 43 61 74 65 67 6f 72 79 49  Line(c.CategoryI
82f0: 44 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  D);....         
8300: 20 63 2e 44 65 73 63 72 69 70 74 69 6f 6e 20 3d   c.Description =
8310: 20 22 4d 79 20 6d 6f 64 69 66 69 65 64 20 64 65   "My modified de
8320: 73 63 72 69 70 74 69 6f 6e 22 3b 0d 0a 20 20 20  scription";..   
8330: 20 20 20 20 20 20 20 64 62 2e 53 61 76 65 43 68         db.SaveCh
8340: 61 6e 67 65 73 28 29 3b 0d 0a 0d 0a 20 20 20 20  anges();....    
8350: 20 20 20 20 20 20 64 62 2e 44 65 6c 65 74 65 4f        db.DeleteO
8360: 62 6a 65 63 74 28 63 29 3b 0d 0a 20 20 20 20 20  bject(c);..     
8370: 20 20 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e       db.SaveChan
8380: 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ges();..        
8390: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  }....        {..
83a0: 20 20 20 20 20 20 20 20 20 20 43 75 73 74 6f 6d            Custom
83b0: 65 72 73 20 63 75 73 74 20 3d 20 6e 65 77 20 43  ers cust = new C
83c0: 75 73 74 6f 6d 65 72 73 28 29 3b 0d 0a 20 20 20  ustomers();..   
83d0: 20 20 20 20 20 20 20 63 75 73 74 2e 43 75 73 74         cust.Cust
83e0: 6f 6d 65 72 49 44 20 3d 20 22 4d 54 4d 54 4d 22  omerID = "MTMTM"
83f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75 73  ;..          cus
8400: 74 2e 43 6f 6e 74 61 63 74 4e 61 6d 65 20 3d 20  t.ContactName = 
8410: 22 4d 79 20 4e 61 6d 65 22 3b 0d 0a 20 20 20 20  "My Name";..    
8420: 20 20 20 20 20 20 63 75 73 74 2e 43 6f 6d 70 61        cust.Compa
8430: 6e 79 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  nyName = "SQLite
8440: 20 43 6f 6d 70 61 6e 79 22 3b 0d 0a 20 20 20 20   Company";..    
8450: 20 20 20 20 20 20 63 75 73 74 2e 43 6f 75 6e 74        cust.Count
8460: 72 79 20 3d 20 22 4e 65 74 68 65 72 6c 61 6e 64  ry = "Netherland
8470: 73 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  s";..          c
8480: 75 73 74 2e 43 69 74 79 20 3d 20 22 41 6d 73 74  ust.City = "Amst
8490: 65 72 64 61 6d 22 3b 0d 0a 20 20 20 20 20 20 20  erdam";..       
84a0: 20 20 20 63 75 73 74 2e 50 68 6f 6e 65 20 3d 20     cust.Phone = 
84b0: 22 30 31 32 33 34 35 36 37 37 22 3b 0d 0a 20 20  "012345677";..  
84c0: 20 20 20 20 20 20 20 20 64 62 2e 41 64 64 54 6f          db.AddTo
84d0: 43 75 73 74 6f 6d 65 72 73 28 63 75 73 74 29 3b  Customers(cust);
84e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 64 62 2e 53  ..          db.S
84f0: 61 76 65 43 68 61 6e 67 65 73 28 29 3b 0d 0a 0d  aveChanges();...
8500: 0a 20 20 20 20 20 20 20 20 20 20 64 62 2e 44 65  .          db.De
8510: 6c 65 74 65 4f 62 6a 65 63 74 28 63 75 73 74 29  leteObject(cust)
8520: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 64 62 2e  ;..          db.
8530: 53 61 76 65 43 68 61 6e 67 65 73 28 29 3b 0d 0a  SaveChanges();..
8540: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8550: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8560: 20 20 76 61 72 20 71 75 65 72 79 20 3d 20 64 62    var query = db
8570: 2e 43 75 73 74 6f 6d 65 72 73 2e 57 68 65 72 65  .Customers.Where
8580: 28 63 75 73 74 20 3d 3e 20 63 75 73 74 2e 43 6f  (cust => cust.Co
8590: 75 6e 74 72 79 20 3d 3d 20 22 44 65 6e 6d 61 72  untry == "Denmar
85a0: 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k")..           
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
85c0: 53 65 6c 65 63 74 4d 61 6e 79 28 63 75 73 74 20  SelectMany(cust 
85d0: 3d 3e 20 63 75 73 74 2e 4f 72 64 65 72 73 2e 57  => cust.Orders.W
85e0: 68 65 72 65 28 6f 20 3d 3e 20 6f 2e 46 72 65 69  here(o => o.Frei
85f0: 67 68 74 20 3e 20 35 29 29 0d 0a 20 20 20 20 20  ght > 5))..     
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 20 20 20 20 20 2e 4f 72 64 65 72 42 79 28 6f 20       .OrderBy(o 
8620: 3d 3e 20 6f 2e 43 75 73 74 6f 6d 65 72 73 2e 43  => o.Customers.C
8630: 75 73 74 6f 6d 65 72 49 44 29 3b 0d 0a 0d 0a 20  ustomerID);.... 
8640: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
8650: 20 28 4f 72 64 65 72 73 20 63 20 69 6e 20 71 75   (Orders c in qu
8660: 65 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ery)..          
8670: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  {..            C
8680: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65  onsole.WriteLine
8690: 28 63 2e 46 72 65 69 67 68 74 29 3b 0d 0a 20 20  (c.Freight);..  
86a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
86b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
86c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 76 61 72  {..          var
86d0: 20 71 75 65 72 79 20 3d 20 66 72 6f 6d 20 63 20   query = from c 
86e0: 69 6e 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 0d  in db.Customers.
86f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8700: 20 20 20 20 20 20 20 77 68 65 72 65 20 63 2e 4f         where c.O
8710: 72 64 65 72 73 2e 41 6e 79 28 6f 20 3d 3e 20 6f  rders.Any(o => o
8720: 2e 4f 72 64 65 72 44 61 74 65 2e 48 61 73 56 61  .OrderDate.HasVa
8730: 6c 75 65 20 3d 3d 20 74 72 75 65 20 26 26 20 6f  lue == true && o
8740: 2e 4f 72 64 65 72 44 61 74 65 2e 56 61 6c 75 65  .OrderDate.Value
8750: 2e 59 65 61 72 20 3d 3d 20 31 39 39 37 29 0d 0a  .Year == 1997)..
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8770: 20 20 20 20 20 20 6f 72 64 65 72 62 79 20 63 2e        orderby c.
8780: 43 75 73 74 6f 6d 65 72 49 44 0d 0a 20 20 20 20  CustomerID..    
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87a0: 20 20 73 65 6c 65 63 74 20 63 3b 0d 0a 0d 0a 20    select c;.... 
87b0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
87c0: 20 28 43 75 73 74 6f 6d 65 72 73 20 63 20 69 6e   (Customers c in
87d0: 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20   query)..       
87e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
87f0: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c    Console.WriteL
8800: 69 6e 65 28 63 2e 43 6f 6d 70 61 6e 79 4e 61 6d  ine(c.CompanyNam
8810: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  e);..          }
8820: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8830: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8840: 20 20 20 20 73 74 72 69 6e 67 20 65 6e 74 69 74      string entit
8850: 79 53 51 4c 20 3d 20 22 53 45 4c 45 43 54 20 56  ySQL = "SELECT V
8860: 41 4c 55 45 20 6f 20 46 52 4f 4d 20 4f 72 64 65  ALUE o FROM Orde
8870: 72 73 20 41 53 20 6f 20 57 48 45 52 45 20 6f 2e  rs AS o WHERE o.
8880: 43 75 73 74 6f 6d 65 72 73 2e 43 6f 75 6e 74 72  Customers.Countr
8890: 79 20 3c 3e 20 27 55 4b 27 20 41 4e 44 20 6f 2e  y <> 'UK' AND o.
88a0: 43 75 73 74 6f 6d 65 72 73 2e 43 6f 75 6e 74 72  Customers.Countr
88b0: 79 20 3c 3e 20 27 4d 65 78 69 63 6f 27 20 41 4e  y <> 'Mexico' AN
88c0: 44 20 59 65 61 72 28 6f 2e 4f 72 64 65 72 44 61  D Year(o.OrderDa
88d0: 74 65 29 20 3d 20 31 39 39 37 20 4f 52 44 45 52  te) = 1997 ORDER
88e0: 20 42 59 20 6f 2e 4f 72 64 65 72 49 44 3b 22 3b   BY o.OrderID;";
88f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65  ..          Obje
8900: 63 74 51 75 65 72 79 3c 4f 72 64 65 72 73 3e 20  ctQuery<Orders> 
8910: 71 75 65 72 79 20 3d 20 64 62 2e 43 72 65 61 74  query = db.Creat
8920: 65 51 75 65 72 79 3c 4f 72 64 65 72 73 3e 28 65  eQuery<Orders>(e
8930: 6e 74 69 74 79 53 51 4c 29 3b 0d 0a 0d 0a 20 20  ntitySQL);....  
8940: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
8950: 28 4f 72 64 65 72 73 20 6f 20 69 6e 20 71 75 65  (Orders o in que
8960: 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ry)..          {
8970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
8980: 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
8990: 6f 2e 53 68 69 70 50 6f 73 74 61 6c 43 6f 64 65  o.ShipPostalCode
89a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
89b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
89c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
89d0: 20 20 20 73 74 72 69 6e 67 20 65 6e 74 69 74 79     string entity
89e0: 53 51 4c 20 3d 20 22 53 45 4c 45 43 54 20 56 41  SQL = "SELECT VA
89f0: 4c 55 45 20 6f 20 46 52 4f 4d 20 4f 72 64 65 72  LUE o FROM Order
8a00: 73 20 41 53 20 6f 20 57 48 45 52 45 20 4e 65 77  s AS o WHERE New
8a10: 47 75 69 64 28 29 20 3c 3e 20 4e 65 77 47 75 69  Guid() <> NewGui
8a20: 64 28 29 20 4f 52 44 45 52 20 42 59 20 6f 2e 4f  d() ORDER BY o.O
8a30: 72 64 65 72 49 44 3b 22 3b 0d 0a 20 20 20 20 20  rderID;";..     
8a40: 20 20 20 20 20 4f 62 6a 65 63 74 51 75 65 72 79       ObjectQuery
8a50: 3c 4f 72 64 65 72 73 3e 20 71 75 65 72 79 20 3d  <Orders> query =
8a60: 20 64 62 2e 43 72 65 61 74 65 51 75 65 72 79 3c   db.CreateQuery<
8a70: 4f 72 64 65 72 73 3e 28 65 6e 74 69 74 79 53 51  Orders>(entitySQ
8a80: 4c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  L);....         
8a90: 20 66 6f 72 65 61 63 68 20 28 4f 72 64 65 72 73   foreach (Orders
8aa0: 20 6f 20 69 6e 20 71 75 65 72 79 29 0d 0a 20 20   o in query)..  
8ab0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8ac0: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
8ad0: 72 69 74 65 4c 69 6e 65 28 6f 2e 53 68 69 70 50  riteLine(o.ShipP
8ae0: 6f 73 74 61 6c 43 6f 64 65 29 3b 0d 0a 20 20 20  ostalCode);..   
8af0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8b00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
8b10: 2f 20 54 68 69 73 20 71 75 65 72 79 20 72 65 71  / This query req
8b20: 75 69 72 65 73 20 53 51 4c 69 74 65 20 33 2e 36  uires SQLite 3.6
8b30: 2e 32 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 63  .2 to function c
8b40: 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20  orrectly..      
8b50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 76    {..          v
8b60: 61 72 20 71 75 65 72 79 20 3d 20 66 72 6f 6d 20  ar query = from 
8b70: 70 20 69 6e 20 64 62 2e 50 72 6f 64 75 63 74 73  p in db.Products
8b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8b90: 20 20 20 20 20 20 20 20 77 68 65 72 65 20 70 2e          where p.
8ba0: 4f 72 64 65 72 44 65 74 61 69 6c 73 2e 43 6f 75  OrderDetails.Cou
8bb0: 6e 74 28 6f 64 20 3d 3e 20 6f 64 2e 4f 72 64 65  nt(od => od.Orde
8bc0: 72 73 2e 43 75 73 74 6f 6d 65 72 73 2e 43 6f 75  rs.Customers.Cou
8bd0: 6e 74 72 79 20 3d 3d 20 70 2e 53 75 70 70 6c 69  ntry == p.Suppli
8be0: 65 72 73 2e 43 6f 75 6e 74 72 79 29 20 3e 20 32  ers.Country) > 2
8bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c00: 20 20 20 20 20 20 20 20 6f 72 64 65 72 62 79 20          orderby 
8c10: 70 2e 50 72 6f 64 75 63 74 49 44 0d 0a 20 20 20  p.ProductID..   
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 20 20 20 73 65 6c 65 63 74 20 70 3b 0d 0a 0d 0a     select p;....
8c40: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
8c50: 68 20 28 50 72 6f 64 75 63 74 73 20 70 20 69 6e  h (Products p in
8c60: 20 71 75 65 72 79 29 0d 0a 20 20 20 20 20 20 20   query)..       
8c70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8c80: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c    Console.WriteL
8c90: 69 6e 65 28 70 2e 50 72 6f 64 75 63 74 4e 61 6d  ine(p.ProductNam
8ca0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  e);..          }
8cb0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
8cc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
8cd0: 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a  ..      // NOTE:
8ce0: 20 28 4a 4a 4d 29 20 52 65 6d 6f 76 65 64 20 6f   (JJM) Removed o
8cf0: 6e 20 32 30 31 31 2f 30 37 2f 30 36 2c 20 6d 61  n 2011/07/06, ma
8d00: 6b 65 73 20 69 74 20 68 61 72 64 65 72 20 74 6f  kes it harder to
8d10: 20 72 75 6e 20 74 68 69 73 20 45 58 45 20 76 69   run this EXE vi
8d20: 61 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  a..      //     
8d30: 20 20 74 68 65 20 6e 65 77 20 75 6e 69 74 20 74    the new unit t
8d40: 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20  est suite...    
8d50: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 43    //..      // C
8d60: 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 28 29  onsole.ReadKey()
8d70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
8d80: 6e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  n 0;..    }..  }
8d90: 0d 0a 7d 0d 0a                                   ..}..