System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact f39bb9da42e9c287b8004c934458104811fb5b6e:


0000: ef bb bf 2f 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 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.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 0a 20 2a 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: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 51 4c  /..namespace SQL
0130: 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 44 65 73  ite.Designer.Des
0140: 69 67 6e 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79  ign.{.  using Sy
0150: 73 74 65 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79  stem;.  using Sy
0160: 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73  stem.Collections
0170: 2e 47 65 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e  .Generic;.  usin
0180: 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74  g System.Collect
0190: 69 6f 6e 73 3b 0a 20 20 75 73 69 6e 67 20 53 79  ions;.  using Sy
01a0: 73 74 65 6d 2e 54 65 78 74 3b 0a 20 20 75 73 69  stem.Text;.  usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e  ng System.Compon
01c0: 65 6e 74 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e  entModel;.  usin
01d0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20  g System.Data;. 
01e0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
01f0: 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69  ta.Common;.  usi
0200: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e  ng System.Compon
0210: 65 6e 74 4d 6f 64 65 6c 2e 44 65 73 69 67 6e 3b  entModel.Design;
0220: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0230: 44 72 61 77 69 6e 67 2e 44 65 73 69 67 6e 3b 0a  Drawing.Design;.
0240: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57    using System.W
0250: 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0a 20 20  indows.Forms;.  
0260: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f  using System.Glo
0270: 62 61 6c 69 7a 61 74 69 6f 6e 3b 0a 0a 20 20 69  balization;..  i
0280: 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 46 6f  nternal class Fo
0290: 72 65 69 67 6e 4b 65 79 45 64 69 74 6f 72 20 3a  reignKeyEditor :
02a0: 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f   CollectionEdito
02b0: 72 0a 20 20 7b 0a 20 20 20 20 54 61 62 6c 65 20  r.  {.    Table 
02c0: 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 6f 6c 6c  _table;.    Coll
02d0: 65 63 74 69 6f 6e 45 64 69 74 6f 72 2e 43 6f 6c  ectionEditor.Col
02e0: 6c 65 63 74 69 6f 6e 46 6f 72 6d 20 5f 66 6f 72  lectionForm _for
02f0: 6d 3b 0a 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20  m;.    object[] 
0300: 5f 69 74 65 6d 73 3b 0a 20 20 20 20 6f 62 6a 65  _items;.    obje
0310: 63 74 5b 5d 20 5f 6f 72 69 67 3b 0a 20 20 20 20  ct[] _orig;.    
0320: 69 6e 74 20 5f 63 6f 75 6e 74 3b 0a 0a 20 20 20  int _count;..   
0330: 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69 67   internal Foreig
0340: 6e 4b 65 79 45 64 69 74 6f 72 28 54 61 62 6c 65  nKeyEditor(Table
0350: 20 70 61 72 65 6e 74 29 0a 20 20 20 20 20 20 3a   parent).      :
0360: 20 62 61 73 65 28 74 79 70 65 6f 66 28 4c 69 73   base(typeof(Lis
0370: 74 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 29 29 0a  t<ForeignKey>)).
0380: 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 74 61 62      {.      _tab
0390: 6c 65 20 3d 20 70 61 72 65 6e 74 3b 0a 20 20 20  le = parent;.   
03a0: 20 20 20 5f 63 6f 75 6e 74 20 3d 20 5f 74 61 62     _count = _tab
03b0: 6c 65 2e 46 6f 72 65 69 67 6e 4b 65 79 73 2e 43  le.ForeignKeys.C
03c0: 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ount;.    }..   
03d0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
03e0: 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64  ide CollectionEd
03f0: 69 74 6f 72 2e 43 6f 6c 6c 65 63 74 69 6f 6e 46  itor.CollectionF
0400: 6f 72 6d 20 43 72 65 61 74 65 43 6f 6c 6c 65 63  orm CreateCollec
0410: 74 69 6f 6e 46 6f 72 6d 28 29 0a 20 20 20 20 7b  tionForm().    {
0420: 0a 20 20 20 20 20 20 5f 66 6f 72 6d 20 3d 20 62  .      _form = b
0430: 61 73 65 2e 43 72 65 61 74 65 43 6f 6c 6c 65 63  ase.CreateCollec
0440: 74 69 6f 6e 46 6f 72 6d 28 29 3b 0a 20 20 20 20  tionForm();.    
0450: 20 20 5f 66 6f 72 6d 2e 54 65 78 74 20 3d 20 22    _form.Text = "
0460: 46 6f 72 65 69 67 6e 20 4b 65 79 20 45 64 69 74  Foreign Key Edit
0470: 6f 72 22 3b 0a 20 20 20 20 20 20 66 6f 72 65 61  or";.      forea
0480: 63 68 20 28 43 6f 6e 74 72 6f 6c 20 63 20 69 6e  ch (Control c in
0490: 20 5f 66 6f 72 6d 2e 43 6f 6e 74 72 6f 6c 73 5b   _form.Controls[
04a0: 30 5d 2e 43 6f 6e 74 72 6f 6c 73 29 0a 20 20 20  0].Controls).   
04b0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 50 72 6f     {.        Pro
04c0: 70 65 72 74 79 47 72 69 64 20 67 72 69 64 20 3d  pertyGrid grid =
04d0: 20 63 20 61 73 20 50 72 6f 70 65 72 74 79 47 72   c as PropertyGr
04e0: 69 64 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  id;.        if (
04f0: 67 72 69 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  grid != null).  
0500: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0510: 20 20 67 72 69 64 2e 48 65 6c 70 56 69 73 69 62    grid.HelpVisib
0520: 6c 65 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20  le = true;.     
0530: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0540: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
0550: 20 20 20 20 5f 66 6f 72 6d 2e 57 69 64 74 68 20      _form.Width 
0560: 3d 20 28 69 6e 74 29 28 5f 66 6f 72 6d 2e 57 69  = (int)(_form.Wi
0570: 64 74 68 20 2a 20 31 2e 32 35 29 3b 0a 20 20 20  dth * 1.25);.   
0580: 20 20 20 5f 66 6f 72 6d 2e 48 65 69 67 68 74 20     _form.Height 
0590: 3d 20 28 69 6e 74 29 28 5f 66 6f 72 6d 2e 48 65  = (int)(_form.He
05a0: 69 67 68 74 20 2a 20 31 2e 32 35 29 3b 0a 0a 20  ight * 1.25);.. 
05b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 6f 72       return _for
05c0: 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  m;.    }..    pr
05d0: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
05e0: 20 6f 62 6a 65 63 74 20 43 72 65 61 74 65 49 6e   object CreateIn
05f0: 73 74 61 6e 63 65 28 54 79 70 65 20 69 74 65 6d  stance(Type item
0600: 54 79 70 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  Type).    {.    
0610: 20 20 69 66 20 28 69 74 65 6d 54 79 70 65 20 3d    if (itemType =
0620: 3d 20 74 79 70 65 6f 66 28 46 6f 72 65 69 67 6e  = typeof(Foreign
0630: 4b 65 79 29 29 0a 20 20 20 20 20 20 7b 0a 20 20  Key)).      {.  
0640: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
0650: 20 46 6f 72 65 69 67 6e 4b 65 79 28 6e 75 6c 6c   ForeignKey(null
0660: 2c 20 5f 74 61 62 6c 65 2c 20 6e 75 6c 6c 29 3b  , _table, null);
0670: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 74  .      }.      t
0680: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70 70  hrow new NotSupp
0690: 6f 72 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  ortedException()
06a0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ;.    }..    pro
06b0: 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20  tected override 
06c0: 6f 62 6a 65 63 74 5b 5d 20 47 65 74 49 74 65 6d  object[] GetItem
06d0: 73 28 6f 62 6a 65 63 74 20 65 64 69 74 56 61 6c  s(object editVal
06e0: 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ue).    {.      
06f0: 69 66 20 28 5f 69 74 65 6d 73 20 3d 3d 20 6e 75  if (_items == nu
0700: 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ll).      {.    
0710: 20 20 20 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e      List<Foreign
0720: 4b 65 79 3e 20 69 74 65 6d 73 20 3d 20 65 64 69  Key> items = edi
0730: 74 56 61 6c 75 65 20 61 73 20 4c 69 73 74 3c 46  tValue as List<F
0740: 6f 72 65 69 67 6e 4b 65 79 3e 3b 0a 20 20 20 20  oreignKey>;.    
0750: 20 20 20 20 5f 69 74 65 6d 73 20 3d 20 6e 65 77      _items = new
0760: 20 6f 62 6a 65 63 74 5b 69 74 65 6d 73 2e 43 6f   object[items.Co
0770: 75 6e 74 5d 3b 0a 20 20 20 20 20 20 20 20 5f 6f  unt];.        _o
0780: 72 69 67 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  rig = new object
0790: 5b 69 74 65 6d 73 2e 43 6f 75 6e 74 5d 3b 0a 20  [items.Count];. 
07a0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
07b0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 69 74 65 6d  n = 0; n < _item
07c0: 73 2e 4c 65 6e 67 74 68 3b 20 6e 2b 2b 29 0a 20  s.Length; n++). 
07d0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
07e0: 20 20 20 5f 69 74 65 6d 73 5b 6e 5d 20 3d 20 28     _items[n] = (
07f0: 28 49 43 6c 6f 6e 65 61 62 6c 65 29 69 74 65 6d  (ICloneable)item
0800: 73 5b 6e 5d 29 2e 43 6c 6f 6e 65 28 29 3b 0a 20  s[n]).Clone();. 
0810: 20 20 20 20 20 20 20 20 20 5f 6f 72 69 67 5b 6e           _orig[n
0820: 5d 20 3d 20 69 74 65 6d 73 5b 6e 5d 3b 0a 20 20  ] = items[n];.  
0830: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
0840: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 69 74        return _it
0850: 65 6d 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ems;.    }..    
0860: 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69  protected overri
0870: 64 65 20 6f 62 6a 65 63 74 20 53 65 74 49 74 65  de object SetIte
0880: 6d 73 28 6f 62 6a 65 63 74 20 65 64 69 74 56 61  ms(object editVa
0890: 6c 75 65 2c 20 6f 62 6a 65 63 74 5b 5d 20 76 61  lue, object[] va
08a0: 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lue).    {.     
08b0: 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61   bool dirty = fa
08c0: 6c 73 65 3b 0a 20 20 20 20 20 20 69 66 20 28 5f  lse;.      if (_
08d0: 66 6f 72 6d 2e 44 69 61 6c 6f 67 52 65 73 75 6c  form.DialogResul
08e0: 74 20 3d 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c  t == DialogResul
08f0: 74 2e 43 61 6e 63 65 6c 29 20 76 61 6c 75 65 20  t.Cancel) value 
0900: 3d 20 5f 6f 72 69 67 3b 0a 0a 20 20 20 20 20 20  = _orig;..      
0910: 69 66 20 28 65 64 69 74 56 61 6c 75 65 20 21 3d  if (editValue !=
0920: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20   null).      {. 
0930: 20 20 20 20 20 20 20 69 66 20 28 21 28 65 64 69         if (!(edi
0940: 74 56 61 6c 75 65 20 69 73 20 49 4c 69 73 74 29  tValue is IList)
0950: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
0960: 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 64 69        return edi
0970: 74 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20  tValue;.        
0980: 7d 0a 20 20 20 20 20 20 20 20 49 4c 69 73 74 20  }.        IList 
0990: 6c 69 73 74 20 3d 20 28 49 4c 69 73 74 29 65 64  list = (IList)ed
09a0: 69 74 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  itValue;.       
09b0: 20 6c 69 73 74 2e 43 6c 65 61 72 28 29 3b 0a 20   list.Clear();. 
09c0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
09d0: 69 20 3d 20 30 3b 20 69 20 3c 20 76 61 6c 75 65  i = 0; i < value
09e0: 2e 4c 65 6e 67 74 68 3b 20 69 2b 2b 29 0a 20 20  .Length; i++).  
09f0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0a00: 20 20 46 6f 72 65 69 67 6e 4b 65 79 20 66 6b 65    ForeignKey fke
0a10: 79 20 3d 20 76 61 6c 75 65 5b 69 5d 20 61 73 20  y = value[i] as 
0a20: 46 6f 72 65 69 67 6e 4b 65 79 3b 0a 0a 20 20 20  ForeignKey;..   
0a30: 20 20 20 20 20 20 20 69 66 20 28 66 6b 65 79 20         if (fkey 
0a40: 21 3d 20 6e 75 6c 6c 20 26 26 20 53 74 72 69 6e  != null && Strin
0a50: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
0a60: 66 6b 65 79 2e 46 72 6f 6d 2e 43 6f 6c 75 6d 6e  fkey.From.Column
0a70: 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  ) == false && St
0a80: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
0a90: 74 79 28 66 6b 65 79 2e 54 6f 2e 43 61 74 61 6c  ty(fkey.To.Catal
0aa0: 6f 67 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 0a  og) == false &&.
0ab0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
0ac0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
0ad0: 28 66 6b 65 79 2e 54 6f 2e 54 61 62 6c 65 29 20  (fkey.To.Table) 
0ae0: 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69  == false && Stri
0af0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
0b00: 28 66 6b 65 79 2e 54 6f 2e 43 6f 6c 75 6d 6e 29  (fkey.To.Column)
0b10: 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20   == false).     
0b20: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0b30: 20 20 20 69 66 20 28 66 6b 65 79 2e 49 73 44 69     if (fkey.IsDi
0b40: 72 74 79 29 20 64 69 72 74 79 20 3d 20 74 72 75  rty) dirty = tru
0b50: 65 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
0b60: 6c 69 73 74 2e 41 64 64 28 76 61 6c 75 65 5b 69  list.Add(value[i
0b70: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ]);.          }.
0b80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0b90: 20 20 69 66 20 28 28 64 69 72 74 79 20 3d 3d 20    if ((dirty == 
0ba0: 74 72 75 65 20 7c 7c 20 6c 69 73 74 2e 43 6f 75  true || list.Cou
0bb0: 6e 74 20 21 3d 20 5f 63 6f 75 6e 74 29 20 26 26  nt != _count) &&
0bc0: 20 5f 66 6f 72 6d 2e 44 69 61 6c 6f 67 52 65 73   _form.DialogRes
0bd0: 75 6c 74 20 3d 3d 20 44 69 61 6c 6f 67 52 65 73  ult == DialogRes
0be0: 75 6c 74 2e 4f 4b 29 0a 20 20 20 20 20 20 20 20  ult.OK).        
0bf0: 5f 74 61 62 6c 65 2e 4d 61 6b 65 44 69 72 74 79  _table.MakeDirty
0c00: 28 29 3b 20 20 20 20 20 20 0a 20 20 20 20 20 20  ();      .      
0c10: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 65  }.      return e
0c20: 64 69 74 56 61 6c 75 65 3b 0a 20 20 20 20 7d 0a  ditValue;.    }.
0c30: 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20    }..  internal 
0c40: 63 6c 61 73 73 20 46 6f 72 65 69 67 6e 4b 65 79  class ForeignKey
0c50: 49 74 65 6d 20 3a 20 49 48 61 76 65 43 6f 6e 6e  Item : IHaveConn
0c60: 65 63 74 69 6f 6e 53 63 6f 70 65 0a 20 20 7b 0a  ectionScope.  {.
0c70: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0c80: 6e 67 20 5f 63 61 74 61 6c 6f 67 3b 0a 20 20 20  ng _catalog;.   
0c90: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
0ca0: 5f 74 61 62 6c 65 3b 0a 20 20 20 20 70 72 69 76  _table;.    priv
0cb0: 61 74 65 20 73 74 72 69 6e 67 20 5f 63 6f 6c 75  ate string _colu
0cc0: 6d 6e 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  mn;.    private 
0cd0: 46 6f 72 65 69 67 6e 4b 65 79 20 5f 66 6b 65 79  ForeignKey _fkey
0ce0: 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
0cf0: 46 6f 72 65 69 67 6e 4b 65 79 49 74 65 6d 28 46  ForeignKeyItem(F
0d00: 6f 72 65 69 67 6e 4b 65 79 20 66 6b 65 79 2c 20  oreignKey fkey, 
0d10: 73 74 72 69 6e 67 20 63 61 74 61 6c 6f 67 2c 20  string catalog, 
0d20: 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
0d30: 72 69 6e 67 20 63 6f 6c 75 6d 6e 29 0a 20 20 20  ring column).   
0d40: 20 7b 0a 20 20 20 20 20 20 5f 63 61 74 61 6c 6f   {.      _catalo
0d50: 67 20 3d 20 63 61 74 61 6c 6f 67 3b 0a 20 20 20  g = catalog;.   
0d60: 20 20 20 5f 74 61 62 6c 65 20 3d 20 74 61 62 6c     _table = tabl
0d70: 65 3b 0a 20 20 20 20 20 20 5f 63 6f 6c 75 6d 6e  e;.      _column
0d80: 20 3d 20 63 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20   = column;.     
0d90: 20 5f 66 6b 65 79 20 3d 20 66 6b 65 79 3b 0a 20   _fkey = fkey;. 
0da0: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
0db0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
0dc0: 20 54 6f 53 74 72 69 6e 67 28 29 0a 20 20 20 20   ToString().    
0dd0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
0de0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
0df0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
0e00: 6e 74 43 75 6c 74 75 72 65 2c 20 22 5b 7b 30 7d  ntCulture, "[{0}
0e10: 5d 2e 5b 7b 31 7d 5d 2e 5b 7b 32 7d 5d 22 2c 20  ].[{1}].[{2}]", 
0e20: 5f 63 61 74 61 6c 6f 67 2c 20 5f 74 61 62 6c 65  _catalog, _table
0e30: 2c 20 5f 63 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20  , _column);.    
0e40: 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  }..    #region I
0e50: 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4d  HaveConnection M
0e60: 65 6d 62 65 72 73 0a 0a 20 20 20 20 5b 42 72 6f  embers..    [Bro
0e70: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20  wsable(false)]. 
0e80: 20 20 20 70 75 62 6c 69 63 20 56 69 65 77 54 61     public ViewTa
0e90: 62 6c 65 42 61 73 65 20 44 65 73 69 67 6e 54 61  bleBase DesignTa
0ea0: 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ble.    {.      
0eb0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66 6b  get { return _fk
0ec0: 65 79 2e 44 65 73 69 67 6e 54 61 62 6c 65 3b 20  ey.DesignTable; 
0ed0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  }.    }..    pub
0ee0: 6c 69 63 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  lic DbConnection
0ef0: 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29   GetConnection()
0f00: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
0f10: 75 72 6e 20 28 28 49 48 61 76 65 43 6f 6e 6e 65  urn ((IHaveConne
0f20: 63 74 69 6f 6e 29 5f 66 6b 65 79 29 2e 47 65 74  ction)_fkey).Get
0f30: 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 3b 0a 20 20  Connection();.  
0f40: 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61    }..    [Browsa
0f50: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
0f60: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 61  public string Ta
0f70: 62 6c 65 53 63 6f 70 65 0a 20 20 20 20 7b 0a 20  bleScope.    {. 
0f80: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
0f90: 6e 20 5f 74 61 62 6c 65 3b 20 7d 0a 20 20 20 20  n _table; }.    
0fa0: 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  }..    [Browsabl
0fb0: 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75  e(false)].    pu
0fc0: 62 6c 69 63 20 73 74 72 69 6e 67 20 43 61 74 61  blic string Cata
0fd0: 6c 6f 67 53 63 6f 70 65 0a 20 20 20 20 7b 0a 20  logScope.    {. 
0fe0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
0ff0: 6e 20 5f 63 61 74 61 6c 6f 67 3b 20 7d 0a 20 20  n _catalog; }.  
1000: 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
1010: 69 6f 6e 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61  ion..    [Browsa
1020: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
1030: 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43  [Editor(typeof(C
1040: 61 74 61 6c 6f 67 54 79 70 65 45 64 69 74 6f 72  atalogTypeEditor
1050: 29 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65  ), typeof(UIType
1060: 45 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 70 75  Editor))].    pu
1070: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
1080: 69 6e 67 20 43 61 74 61 6c 6f 67 0a 20 20 20 20  ing Catalog.    
1090: 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  {.      get { re
10a0: 74 75 72 6e 20 5f 63 61 74 61 6c 6f 67 3b 20 7d  turn _catalog; }
10b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 45 64 69  .    }..    [Edi
10c0: 74 6f 72 28 74 79 70 65 6f 66 28 54 61 62 6c 65  tor(typeof(Table
10d0: 73 54 79 70 65 45 64 69 74 6f 72 29 2c 20 74 79  sTypeEditor), ty
10e0: 70 65 6f 66 28 55 49 54 79 70 65 45 64 69 74 6f  peof(UITypeEdito
10f0: 72 29 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  r))].    public 
1100: 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 54  virtual string T
1110: 61 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20  able.    {.     
1120: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74   get { return _t
1130: 61 62 6c 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20  able; }.    }.. 
1140: 20 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f     [Editor(typeo
1150: 66 28 43 6f 6c 75 6d 6e 73 54 79 70 65 45 64 69  f(ColumnsTypeEdi
1160: 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49 54  tor), typeof(UIT
1170: 79 70 65 45 64 69 74 6f 72 29 29 5d 0a 20 20 20  ypeEditor))].   
1180: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
1190: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20 20  string Column.  
11a0: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
11b0: 72 65 74 75 72 6e 20 5f 63 6f 6c 75 6d 6e 3b 20  return _column; 
11c0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  }.    }..    pro
11d0: 74 65 63 74 65 64 20 76 6f 69 64 20 53 65 74 43  tected void SetC
11e0: 61 74 61 6c 6f 67 28 73 74 72 69 6e 67 20 76 61  atalog(string va
11f0: 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lue).    {.     
1200: 20 69 66 20 28 5f 63 61 74 61 6c 6f 67 20 21 3d   if (_catalog !=
1210: 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 7b 0a   value).      {.
1220: 20 20 20 20 20 20 20 20 5f 63 61 74 61 6c 6f 67          _catalog
1230: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
1240: 20 20 5f 66 6b 65 79 2e 4d 61 6b 65 44 69 72 74    _fkey.MakeDirt
1250: 79 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  y();.      }.   
1260: 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63 74 65   }..    protecte
1270: 64 20 76 6f 69 64 20 53 65 74 54 61 62 6c 65 28  d void SetTable(
1280: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0a 20 20  string value).  
1290: 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 74    {.      if (_t
12a0: 61 62 6c 65 20 21 3d 20 76 61 6c 75 65 29 0a 20  able != value). 
12b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f       {.        _
12c0: 74 61 62 6c 65 20 3d 20 76 61 6c 75 65 3b 0a 20  table = value;. 
12d0: 20 20 20 20 20 20 20 5f 66 6b 65 79 2e 4d 61 6b         _fkey.Mak
12e0: 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20 20 20  eDirty();.      
12f0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  }.    }..    pro
1300: 74 65 63 74 65 64 20 76 6f 69 64 20 53 65 74 43  tected void SetC
1310: 6f 6c 75 6d 6e 28 73 74 72 69 6e 67 20 76 61 6c  olumn(string val
1320: 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ue).    {.      
1330: 69 66 20 28 5f 63 6f 6c 75 6d 6e 20 21 3d 20 76  if (_column != v
1340: 61 6c 75 65 29 0a 20 20 20 20 20 20 7b 0a 20 20  alue).      {.  
1350: 20 20 20 20 20 20 5f 63 6f 6c 75 6d 6e 20 3d 20        _column = 
1360: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 5f  value;.        _
1370: 66 6b 65 79 2e 4d 61 6b 65 44 69 72 74 79 28 29  fkey.MakeDirty()
1380: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1390: 20 20 7d 0a 0a 20 20 5b 54 79 70 65 43 6f 6e 76    }..  [TypeConv
13a0: 65 72 74 65 72 28 74 79 70 65 6f 66 28 45 78 70  erter(typeof(Exp
13b0: 61 6e 64 61 62 6c 65 4f 62 6a 65 63 74 43 6f 6e  andableObjectCon
13c0: 76 65 72 74 65 72 29 29 5d 0a 20 20 69 6e 74 65  verter))].  inte
13d0: 72 6e 61 6c 20 63 6c 61 73 73 20 46 6f 72 65 69  rnal class Forei
13e0: 67 6e 4b 65 79 46 72 6f 6d 49 74 65 6d 20 3a 20  gnKeyFromItem : 
13f0: 46 6f 72 65 69 67 6e 4b 65 79 49 74 65 6d 0a 20  ForeignKeyItem. 
1400: 20 7b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20   {.    internal 
1410: 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74  ForeignKeyFromIt
1420: 65 6d 28 46 6f 72 65 69 67 6e 4b 65 79 20 66 6b  em(ForeignKey fk
1430: 65 79 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  ey, string colum
1440: 6e 29 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28  n).      : base(
1450: 66 6b 65 79 2c 20 66 6b 65 79 2e 5f 74 61 62 6c  fkey, fkey._tabl
1460: 65 2e 43 61 74 61 6c 6f 67 2c 20 66 6b 65 79 2e  e.Catalog, fkey.
1470: 5f 74 61 62 6c 65 2e 4e 61 6d 65 2c 20 63 6f 6c  _table.Name, col
1480: 75 6d 6e 29 0a 20 20 20 20 7b 0a 20 20 20 20 7d  umn).    {.    }
1490: 0a 0a 20 20 20 20 5b 45 64 69 74 6f 72 28 74 79  ..    [Editor(ty
14a0: 70 65 6f 66 28 43 6f 6c 75 6d 6e 73 54 79 70 65  peof(ColumnsType
14b0: 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66 28  Editor), typeof(
14c0: 55 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d 0a  UITypeEditor))].
14d0: 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e      [Description
14e0: 28 22 54 68 65 20 63 6f 6c 75 6d 6e 20 6f 66 20  ("The column of 
14f0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
1500: 65 20 74 68 61 74 20 72 65 66 65 72 73 20 74 6f  e that refers to
1510: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
1520: 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 22 29 5d   relationship")]
1530: 0a 20 20 20 20 70 75 62 6c 69 63 20 6e 65 77 20  .    public new 
1540: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20 20  string Column.  
1550: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
1560: 72 65 74 75 72 6e 20 62 61 73 65 2e 43 6f 6c 75  return base.Colu
1570: 6d 6e 3b 20 7d 0a 20 20 20 20 20 20 73 65 74 20  mn; }.      set 
1580: 7b 20 53 65 74 43 6f 6c 75 6d 6e 28 76 61 6c 75  { SetColumn(valu
1590: 65 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  e); }.    }..   
15a0: 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73   [Browsable(fals
15b0: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  e)].    public o
15c0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
15d0: 61 74 61 6c 6f 67 0a 20 20 20 20 7b 0a 20 20 20  atalog.    {.   
15e0: 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20     get.      {. 
15f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 61         return ba
1600: 73 65 2e 43 61 74 61 6c 6f 67 3b 0a 20 20 20 20  se.Catalog;.    
1610: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b    }.    }..    [
1620: 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29  Browsable(false)
1630: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ].    public ove
1640: 72 72 69 64 65 20 73 74 72 69 6e 67 20 54 61 62  rride string Tab
1650: 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  le.    {.      g
1660: 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  et.      {.     
1670: 20 20 20 72 65 74 75 72 6e 20 62 61 73 65 2e 44     return base.D
1680: 65 73 69 67 6e 54 61 62 6c 65 2e 4e 61 6d 65 3b  esignTable.Name;
1690: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
16a0: 20 7d 0a 0a 20 20 5b 54 79 70 65 43 6f 6e 76 65   }..  [TypeConve
16b0: 72 74 65 72 28 74 79 70 65 6f 66 28 45 78 70 61  rter(typeof(Expa
16c0: 6e 64 61 62 6c 65 4f 62 6a 65 63 74 43 6f 6e 76  ndableObjectConv
16d0: 65 72 74 65 72 29 29 5d 0a 20 20 69 6e 74 65 72  erter))].  inter
16e0: 6e 61 6c 20 63 6c 61 73 73 20 46 6f 72 65 69 67  nal class Foreig
16f0: 6e 4b 65 79 54 6f 49 74 65 6d 20 3a 20 46 6f 72  nKeyToItem : For
1700: 65 69 67 6e 4b 65 79 49 74 65 6d 0a 20 20 7b 0a  eignKeyItem.  {.
1710: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72      internal For
1720: 65 69 67 6e 4b 65 79 54 6f 49 74 65 6d 28 46 6f  eignKeyToItem(Fo
1730: 72 65 69 67 6e 4b 65 79 20 66 6b 65 79 2c 20 73  reignKey fkey, s
1740: 74 72 69 6e 67 20 63 61 74 61 6c 6f 67 2c 20 73  tring catalog, s
1750: 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72  tring table, str
1760: 69 6e 67 20 63 6f 6c 75 6d 6e 29 0a 20 20 20 20  ing column).    
1770: 20 20 3a 20 62 61 73 65 28 66 6b 65 79 2c 20 63    : base(fkey, c
1780: 61 74 61 6c 6f 67 2c 20 74 61 62 6c 65 2c 20 63  atalog, table, c
1790: 6f 6c 75 6d 6e 29 0a 20 20 20 20 7b 0a 20 20 20  olumn).    {.   
17a0: 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62   }..    [Browsab
17b0: 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 5b  le(false)].    [
17c0: 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43 61  Editor(typeof(Ca
17d0: 74 61 6c 6f 67 54 79 70 65 45 64 69 74 6f 72 29  talogTypeEditor)
17e0: 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65 45  , typeof(UITypeE
17f0: 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 5b 44 65  ditor))].    [De
1800: 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20 64  scription("The d
1810: 61 74 61 62 61 73 65 20 63 61 74 61 6c 6f 67 20  atabase catalog 
1820: 28 6d 61 69 6e 2c 20 74 65 6d 70 2c 20 6f 72 20  (main, temp, or 
1830: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61  the name of an a
1840: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1850: 29 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 66  ) to which the f
1860: 6f 72 65 69 67 6e 20 6b 65 79 20 72 65 66 65 72  oreign key refer
1870: 73 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c 69 63  s.")].    public
1880: 20 6e 65 77 20 73 74 72 69 6e 67 20 43 61 74 61   new string Cata
1890: 6c 6f 67 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  log.    {.      
18a0: 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  get.      {.    
18b0: 20 20 20 20 72 65 74 75 72 6e 20 62 61 73 65 2e      return base.
18c0: 43 61 74 61 6c 6f 67 3b 0a 20 20 20 20 20 20 7d  Catalog;.      }
18d0: 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20 20 20  .      set.     
18e0: 20 7b 0a 20 20 20 20 20 20 20 20 53 65 74 43 61   {.        SetCa
18f0: 74 61 6c 6f 67 28 76 61 6c 75 65 29 3b 0a 20 20  talog(value);.  
1900: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
1910: 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 42   [DisplayName("B
1920: 61 73 65 20 54 61 62 6c 65 22 29 5d 0a 20 20 20  ase Table")].   
1930: 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28   [Editor(typeof(
1940: 54 61 62 6c 65 73 54 79 70 65 45 64 69 74 6f 72  TablesTypeEditor
1950: 29 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65  ), typeof(UIType
1960: 45 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 5b 44  Editor))].    [D
1970: 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20  escription("The 
1980: 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
1990: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 72  he foreign key r
19a0: 65 66 65 72 73 2e 22 29 5d 0a 20 20 20 20 70 75  efers.")].    pu
19b0: 62 6c 69 63 20 6e 65 77 20 73 74 72 69 6e 67 20  blic new string 
19c0: 54 61 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20  Table.    {.    
19d0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 62    get { return b
19e0: 61 73 65 2e 54 61 62 6c 65 3b 20 7d 0a 20 20 20  ase.Table; }.   
19f0: 20 20 20 73 65 74 20 7b 20 53 65 74 54 61 62 6c     set { SetTabl
1a00: 65 28 76 61 6c 75 65 29 3b 20 7d 0a 20 20 20 20  e(value); }.    
1a10: 7d 0a 0a 20 20 20 20 5b 45 64 69 74 6f 72 28 74  }..    [Editor(t
1a20: 79 70 65 6f 66 28 43 6f 6c 75 6d 6e 73 54 79 70  ypeof(ColumnsTyp
1a30: 65 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66  eEditor), typeof
1a40: 28 55 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d  (UITypeEditor))]
1a50: 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f  .    [Descriptio
1a60: 6e 28 22 54 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  n("The column to
1a70: 20 77 68 69 63 68 20 74 68 65 20 66 6f 72 65 69   which the forei
1a80: 67 6e 20 6b 65 79 20 72 65 66 65 72 73 2e 22 29  gn key refers.")
1a90: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6e 65 77  ].    public new
1aa0: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20   string Column. 
1ab0: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
1ac0: 20 72 65 74 75 72 6e 20 62 61 73 65 2e 43 6f 6c   return base.Col
1ad0: 75 6d 6e 3b 20 7d 0a 20 20 20 20 20 20 73 65 74  umn; }.      set
1ae0: 20 7b 20 53 65 74 43 6f 6c 75 6d 6e 28 76 61 6c   { SetColumn(val
1af0: 75 65 29 3b 20 7d 0a 20 20 20 20 7d 0a 20 20 7d  ue); }.    }.  }
1b00: 0a 0a 20 20 5b 44 65 66 61 75 6c 74 50 72 6f 70  ..  [DefaultProp
1b10: 65 72 74 79 28 22 46 72 6f 6d 22 29 5d 0a 20 20  erty("From")].  
1b20: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 46  internal class F
1b30: 6f 72 65 69 67 6e 4b 65 79 20 3a 20 49 48 61 76  oreignKey : IHav
1b40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20 49 43 6c  eConnection, ICl
1b50: 6f 6e 65 61 62 6c 65 0a 20 20 7b 0a 20 20 20 20  oneable.  {.    
1b60: 69 6e 74 65 72 6e 61 6c 20 54 61 62 6c 65 20 5f  internal Table _
1b70: 74 61 62 6c 65 3b 0d 0a 20 20 20 20 69 6e 74 65  table;..    inte
1b80: 72 6e 61 6c 20 69 6e 74 20 5f 69 64 3b 0d 0a 20  rnal int _id;.. 
1b90: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
1ba0: 5f 6f 72 64 69 6e 61 6c 3b 0a 20 20 20 20 69 6e  _ordinal;.    in
1bb0: 74 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65  ternal ForeignKe
1bc0: 79 46 72 6f 6d 49 74 65 6d 20 5f 66 72 6f 6d 3b  yFromItem _from;
1bd0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f  .    internal Fo
1be0: 72 65 69 67 6e 4b 65 79 54 6f 49 74 65 6d 20 5f  reignKeyToItem _
1bf0: 74 6f 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  to;.    internal
1c00: 20 73 74 72 69 6e 67 20 5f 6e 61 6d 65 3b 0d 0a   string _name;..
1c10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72      internal str
1c20: 69 6e 67 20 5f 6f 6e 55 70 64 61 74 65 3b 0d 0a  ing _onUpdate;..
1c30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72      internal str
1c40: 69 6e 67 20 5f 6f 6e 44 65 6c 65 74 65 3b 0d 0a  ing _onDelete;..
1c50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72      internal str
1c60: 69 6e 67 20 5f 6d 61 74 63 68 3b 0a 20 20 20 20  ing _match;.    
1c70: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f 64 69  private bool _di
1c80: 72 74 79 3b 0a 0a 20 20 20 20 70 72 69 76 61 74  rty;..    privat
1c90: 65 20 46 6f 72 65 69 67 6e 4b 65 79 28 46 6f 72  e ForeignKey(For
1ca0: 65 69 67 6e 4b 65 79 20 73 6f 75 72 63 65 29 0a  eignKey source).
1cb0: 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 74 61 62      {.      _tab
1cc0: 6c 65 20 3d 20 73 6f 75 72 63 65 2e 5f 74 61 62  le = source._tab
1cd0: 6c 65 3b 0d 0a 20 20 20 20 20 20 5f 69 64 20 3d  le;..      _id =
1ce0: 20 73 6f 75 72 63 65 2e 5f 69 64 3b 0d 0a 20 20   source._id;..  
1cf0: 20 20 20 20 5f 6f 72 64 69 6e 61 6c 20 3d 20 73      _ordinal = s
1d00: 6f 75 72 63 65 2e 5f 6f 72 64 69 6e 61 6c 3b 0a  ource._ordinal;.
1d10: 20 20 20 20 20 20 5f 66 72 6f 6d 20 3d 20 6e 65        _from = ne
1d20: 77 20 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d  w ForeignKeyFrom
1d30: 49 74 65 6d 28 74 68 69 73 2c 20 73 6f 75 72 63  Item(this, sourc
1d40: 65 2e 5f 66 72 6f 6d 2e 43 6f 6c 75 6d 6e 29 3b  e._from.Column);
1d50: 0a 20 20 20 20 20 20 5f 74 6f 20 3d 20 6e 65 77  .      _to = new
1d60: 20 46 6f 72 65 69 67 6e 4b 65 79 54 6f 49 74 65   ForeignKeyToIte
1d70: 6d 28 74 68 69 73 2c 20 73 6f 75 72 63 65 2e 5f  m(this, source._
1d80: 74 6f 2e 43 61 74 61 6c 6f 67 2c 20 73 6f 75 72  to.Catalog, sour
1d90: 63 65 2e 5f 74 6f 2e 54 61 62 6c 65 2c 20 73 6f  ce._to.Table, so
1da0: 75 72 63 65 2e 5f 74 6f 2e 43 6f 6c 75 6d 6e 29  urce._to.Column)
1db0: 3b 0a 20 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20  ;.      _name = 
1dc0: 73 6f 75 72 63 65 2e 5f 6e 61 6d 65 3b 0d 0a 20  source._name;.. 
1dd0: 20 20 20 20 20 5f 6f 6e 55 70 64 61 74 65 20 3d       _onUpdate =
1de0: 20 73 6f 75 72 63 65 2e 5f 6f 6e 55 70 64 61 74   source._onUpdat
1df0: 65 3b 0d 0a 20 20 20 20 20 20 5f 6f 6e 44 65 6c  e;..      _onDel
1e00: 65 74 65 20 3d 20 73 6f 75 72 63 65 2e 5f 6f 6e  ete = source._on
1e10: 44 65 6c 65 74 65 3b 0d 0a 20 20 20 20 20 20 5f  Delete;..      _
1e20: 6d 61 74 63 68 20 3d 20 73 6f 75 72 63 65 2e 5f  match = source._
1e30: 6d 61 74 63 68 3b 0a 20 20 20 20 20 20 5f 64 69  match;.      _di
1e40: 72 74 79 20 3d 20 73 6f 75 72 63 65 2e 5f 64 69  rty = source._di
1e50: 72 74 79 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  rty;.    }..    
1e60: 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20 4d 61  internal void Ma
1e70: 6b 65 44 69 72 74 79 28 29 0a 20 20 20 20 7b 0a  keDirty().    {.
1e80: 20 20 20 20 20 20 5f 64 69 72 74 79 20 3d 20 74        _dirty = t
1e90: 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  rue;.    }..    
1ea0: 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65  [Browsable(false
1eb0: 29 5d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  )].    internal 
1ec0: 62 6f 6f 6c 20 49 73 44 69 72 74 79 0a 20 20 20  bool IsDirty.   
1ed0: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72   {.      get { r
1ee0: 65 74 75 72 6e 20 5f 64 69 72 74 79 3b 20 7d 0a  eturn _dirty; }.
1ef0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72      }..    inter
1f00: 6e 61 6c 20 76 6f 69 64 20 43 6c 65 61 72 44 69  nal void ClearDi
1f10: 72 74 79 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  rty().    {.    
1f20: 20 20 5f 64 69 72 74 79 20 3d 20 66 61 6c 73 65    _dirty = false
1f30: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74  ;.    }..    int
1f40: 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65 79  ernal ForeignKey
1f50: 28 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  (DbConnection cn
1f60: 6e 2c 20 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  n, Table table, 
1f70: 44 61 74 61 52 6f 77 20 72 6f 77 29 0a 20 20 20  DataRow row).   
1f80: 20 7b 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20   {.      _table 
1f90: 3d 20 74 61 62 6c 65 3b 0a 20 20 20 20 20 20 69  = table;.      i
1fa0: 66 20 28 72 6f 77 20 21 3d 20 6e 75 6c 6c 29 0a  f (row != null).
1fb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fc0: 20 5f 69 64 20 3d 20 28 69 6e 74 29 72 6f 77 5b   _id = (int)row[
1fd0: 22 46 4b 45 59 5f 49 44 22 5d 3b 0d 0a 20 20 20  "FKEY_ID"];..   
1fe0: 20 20 20 20 20 5f 6f 72 64 69 6e 61 6c 20 3d 20       _ordinal = 
1ff0: 28 69 6e 74 29 72 6f 77 5b 22 46 4b 45 59 5f 46  (int)row["FKEY_F
2000: 52 4f 4d 5f 4f 52 44 49 4e 41 4c 5f 50 4f 53 49  ROM_ORDINAL_POSI
2010: 54 49 4f 4e 22 5d 3b 0a 20 20 20 20 20 20 20 20  TION"];.        
2020: 5f 66 72 6f 6d 20 3d 20 6e 65 77 20 46 6f 72 65  _from = new Fore
2030: 69 67 6e 4b 65 79 46 72 6f 6d 49 74 65 6d 28 74  ignKeyFromItem(t
2040: 68 69 73 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 46  his, row["FKEY_F
2050: 52 4f 4d 5f 43 4f 4c 55 4d 4e 22 5d 2e 54 6f 53  ROM_COLUMN"].ToS
2060: 74 72 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20  tring());.      
2070: 20 20 5f 74 6f 20 3d 20 6e 65 77 20 46 6f 72 65    _to = new Fore
2080: 69 67 6e 4b 65 79 54 6f 49 74 65 6d 28 74 68 69  ignKeyToItem(thi
2090: 73 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 54 4f 5f  s, row["FKEY_TO_
20a0: 43 41 54 41 4c 4f 47 22 5d 2e 54 6f 53 74 72 69  CATALOG"].ToStri
20b0: 6e 67 28 29 2c 20 72 6f 77 5b 22 46 4b 45 59 5f  ng(), row["FKEY_
20c0: 54 4f 5f 54 41 42 4c 45 22 5d 2e 54 6f 53 74 72  TO_TABLE"].ToStr
20d0: 69 6e 67 28 29 2c 20 72 6f 77 5b 22 46 4b 45 59  ing(), row["FKEY
20e0: 5f 54 4f 5f 43 4f 4c 55 4d 4e 22 5d 2e 54 6f 53  _TO_COLUMN"].ToS
20f0: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
2100: 20 20 20 5f 6e 61 6d 65 20 3d 20 72 6f 77 5b 22     _name = row["
2110: 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 41 4d 45 22  CONSTRAINT_NAME"
2120: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  ].ToString();.. 
2130: 20 20 20 20 20 20 20 5f 6f 6e 55 70 64 61 74 65         _onUpdate
2140: 20 3d 20 72 6f 77 5b 22 46 4b 45 59 5f 4f 4e 5f   = row["FKEY_ON_
2150: 55 50 44 41 54 45 22 5d 2e 54 6f 53 74 72 69 6e  UPDATE"].ToStrin
2160: 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 5f 6f  g();..        _o
2170: 6e 44 65 6c 65 74 65 20 3d 20 72 6f 77 5b 22 46  nDelete = row["F
2180: 4b 45 59 5f 4f 4e 5f 44 45 4c 45 54 45 22 5d 2e  KEY_ON_DELETE"].
2190: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
21a0: 20 20 20 20 20 5f 6d 61 74 63 68 20 3d 20 72 6f       _match = ro
21b0: 77 5b 22 46 4b 45 59 5f 4d 41 54 43 48 22 5d 2e  w["FKEY_MATCH"].
21c0: 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20  ToString();.    
21d0: 20 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 0a 20    }.      else. 
21e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21f0: 5f 69 64 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  _id = -1;..     
2200: 20 20 20 5f 6f 72 64 69 6e 61 6c 20 3d 20 2d 31     _ordinal = -1
2210: 3b 0a 20 20 20 20 20 20 20 20 5f 66 72 6f 6d 20  ;.        _from 
2220: 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65 79  = new ForeignKey
2230: 46 72 6f 6d 49 74 65 6d 28 74 68 69 73 2c 20 22  FromItem(this, "
2240: 22 29 3b 0a 20 20 20 20 20 20 20 20 5f 74 6f 20  ");.        _to 
2250: 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65 79  = new ForeignKey
2260: 54 6f 49 74 65 6d 28 74 68 69 73 2c 20 5f 74 61  ToItem(this, _ta
2270: 62 6c 65 2e 43 61 74 61 6c 6f 67 2c 20 22 22 2c  ble.Catalog, "",
2280: 20 22 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   "");.      }.  
2290: 20 20 7d 0a 0a 20 20 20 20 2f 2f 69 6e 74 65 72    }..    //inter
22a0: 6e 61 6c 20 76 6f 69 64 20 57 72 69 74 65 53 71  nal void WriteSq
22b0: 6c 28 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20  l(StringBuilder 
22c0: 62 75 69 6c 64 65 72 29 0a 20 20 20 20 2f 2f 7b  builder).    //{
22d0: 0a 20 20 20 20 2f 2f 20 20 69 66 20 28 53 74 72  .    //  if (Str
22e0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
22f0: 79 28 5f 66 72 6f 6d 2e 43 6f 6c 75 6d 6e 29 20  y(_from.Column) 
2300: 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69  == false && Stri
2310: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2320: 28 5f 74 6f 2e 43 61 74 61 6c 6f 67 29 20 3d 3d  (_to.Catalog) ==
2330: 20 66 61 6c 73 65 20 26 26 0a 20 20 20 20 2f 2f   false &&.    //
2340: 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c      String.IsNul
2350: 6c 4f 72 45 6d 70 74 79 28 5f 74 6f 2e 54 61 62  lOrEmpty(_to.Tab
2360: 6c 65 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 20  le) == false && 
2370: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
2380: 6d 70 74 79 28 5f 74 6f 2e 43 6f 6c 75 6d 6e 29  mpty(_to.Column)
2390: 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 2f   == false).    /
23a0: 2f 20 20 7b 0a 20 20 20 20 2f 2f 20 20 20 20 62  /  {.    //    b
23b0: 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72  uilder.AppendFor
23c0: 6d 61 74 28 22 43 4f 4e 53 54 52 41 49 4e 54 20  mat("CONSTRAINT 
23d0: 5b 7b 30 7d 5d 20 46 4f 52 45 49 47 4e 20 4b 45  [{0}] FOREIGN KE
23e0: 59 20 28 5b 7b 31 7d 5d 29 20 52 45 46 45 52 45  Y ([{1}]) REFERE
23f0: 4e 43 45 53 20 5b 7b 33 7d 5d 20 28 5b 7b 34 7d  NCES [{3}] ([{4}
2400: 5d 29 22 2c 20 4e 61 6d 65 2c 20 5f 66 72 6f 6d  ])", Name, _from
2410: 2e 43 6f 6c 75 6d 6e 2c 20 5f 74 6f 2e 43 61 74  .Column, _to.Cat
2420: 61 6c 6f 67 2c 20 5f 74 6f 2e 54 61 62 6c 65 2c  alog, _to.Table,
2430: 20 5f 74 6f 2e 43 6f 6c 75 6d 6e 29 3b 0a 20 20   _to.Column);.  
2440: 20 20 2f 2f 20 20 7d 0a 20 20 20 20 2f 2f 7d 0a    //  }.    //}.
2450: 0a 20 20 20 20 5b 50 61 72 65 6e 74 68 65 73 69  .    [Parenthesi
2460: 7a 65 50 72 6f 70 65 72 74 79 4e 61 6d 65 28 74  zePropertyName(t
2470: 72 75 65 29 5d 0a 20 20 20 20 5b 43 61 74 65 67  rue)].    [Categ
2480: 6f 72 79 28 22 49 64 65 6e 74 69 74 79 22 29 5d  ory("Identity")]
2490: 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f  .    [Descriptio
24a0: 6e 28 22 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  n("The name of t
24b0: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 22  he foreign key."
24c0: 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  )].    public st
24d0: 72 69 6e 67 20 4e 61 6d 65 0a 20 20 20 20 7b 0a  ring Name.    {.
24e0: 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20        get.      
24f0: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  {.        if (St
2500: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2510: 74 79 28 5f 6e 61 6d 65 29 20 3d 3d 20 66 61 6c  ty(_name) == fal
2520: 73 65 29 20 72 65 74 75 72 6e 20 5f 6e 61 6d 65  se) return _name
2530: 3b 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
2540: 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
2550: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
2560: 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 46  riantCulture, "F
2570: 4b 5f 7b 30 7d 5f 7b 31 7d 5f 7b 32 7d 22 2c 20  K_{0}_{1}_{2}", 
2580: 5f 66 72 6f 6d 2e 54 61 62 6c 65 2c 20 5f 69 64  _from.Table, _id
2590: 2c 20 5f 6f 72 64 69 6e 61 6c 29 3b 0a 20 20 20  , _ordinal);.   
25a0: 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 0a 20     }.      set. 
25b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
25c0: 66 20 28 5f 6e 61 6d 65 20 21 3d 20 76 61 6c 75  f (_name != valu
25d0: 65 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  e).        {.   
25e0: 20 20 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20 76         _name = v
25f0: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alue;.          
2600: 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20  MakeDirty();.   
2610: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
2620: 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f     }..    #regio
2630: 6e 20 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f  n IHaveConnectio
2640: 6e 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20 5b  n Members..    [
2650: 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29  Browsable(false)
2660: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 56 69 65  ].    public Vie
2670: 77 54 61 62 6c 65 42 61 73 65 20 44 65 73 69 67  wTableBase Desig
2680: 6e 54 61 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20  nTable.    {.   
2690: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
26a0: 5f 74 61 62 6c 65 3b 20 7d 0a 20 20 20 20 7d 0a  _table; }.    }.
26b0: 0a 20 20 20 20 70 75 62 6c 69 63 20 44 62 43 6f  .    public DbCo
26c0: 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e  nnection GetConn
26d0: 65 63 74 69 6f 6e 28 29 0a 20 20 20 20 7b 0a 20  ection().    {. 
26e0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 49 48       return ((IH
26f0: 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 5f 74  aveConnection)_t
2700: 61 62 6c 65 29 2e 47 65 74 43 6f 6e 6e 65 63 74  able).GetConnect
2710: 69 6f 6e 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ion();.    }..  
2720: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2730: 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65      [DisplayName
2740: 28 22 49 64 22 29 5d 0d 0a 20 20 20 20 5b 43 61  ("Id")]..    [Ca
2750: 74 65 67 6f 72 79 28 22 49 64 22 29 5d 0d 0a 20  tegory("Id")].. 
2760: 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28     [Description(
2770: 22 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20  "The identifier 
2780: 6f 66 20 74 68 69 73 20 66 6f 72 65 69 67 6e 20  of this foreign 
2790: 6b 65 79 2e 22 29 5d 0d 0a 20 20 20 20 70 75 62  key.")]..    pub
27a0: 6c 69 63 20 69 6e 74 20 49 64 0d 0a 20 20 20 20  lic int Id..    
27b0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72  {..      get { r
27c0: 65 74 75 72 6e 20 5f 69 64 3b 20 7d 0d 0a 20 20  eturn _id; }..  
27d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 5b 44 69 73 70    }....    [Disp
27e0: 6c 61 79 4e 61 6d 65 28 22 4f 72 64 69 6e 61 6c  layName("Ordinal
27f0: 22 29 5d 0d 0a 20 20 20 20 5b 43 61 74 65 67 6f  ")]..    [Catego
2800: 72 79 28 22 4f 72 64 69 6e 61 6c 22 29 5d 0d 0a  ry("Ordinal")]..
2810: 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e      [Description
2820: 28 22 54 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 64  ("The column ord
2830: 69 6e 61 6c 20 6f 66 20 74 68 69 73 20 66 6f 72  inal of this for
2840: 65 69 67 6e 20 6b 65 79 2e 22 29 5d 0d 0a 20 20  eign key.")]..  
2850: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4f 72 64    public int Ord
2860: 69 6e 61 6c 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  inal..    {..   
2870: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2880: 5f 6f 72 64 69 6e 61 6c 3b 20 7d 0d 0a 20 20 20  _ordinal; }..   
2890: 20 7d 0a 0a 20 20 20 20 5b 44 69 73 70 6c 61 79   }..    [Display
28a0: 4e 61 6d 65 28 22 46 72 6f 6d 20 4b 65 79 22 29  Name("From Key")
28b0: 5d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28  ].    [Category(
28c0: 22 46 72 6f 6d 22 29 5d 0a 20 20 20 20 5b 44 65  "From")].    [De
28d0: 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20 73  scription("The s
28e0: 6f 75 72 63 65 20 63 6f 6c 75 6d 6e 20 69 6e 20  ource column in 
28f0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
2900: 65 20 74 68 61 74 20 72 65 66 65 72 73 20 74 6f  e that refers to
2910: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
2920: 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  .")].    public 
2930: 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74  ForeignKeyFromIt
2940: 65 6d 20 46 72 6f 6d 0a 20 20 20 20 7b 0a 20 20  em From.    {.  
2950: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2960: 20 5f 66 72 6f 6d 3b 20 7d 0a 20 20 20 20 7d 0a   _from; }.    }.
2970: 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d  .    [DisplayNam
2980: 65 28 22 54 6f 20 4b 65 79 22 29 5d 0a 20 20 20  e("To Key")].   
2990: 20 5b 43 61 74 65 67 6f 72 79 28 22 54 6f 22 29   [Category("To")
29a0: 5d 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69  ].    [Descripti
29b0: 6f 6e 28 22 54 68 65 20 74 61 62 6c 65 20 61 6e  on("The table an
29c0: 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 77 68 69 63  d column to whic
29d0: 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
29e0: 66 72 6f 6d 20 63 6f 6c 75 6d 6e 20 69 73 20 72  from column is r
29f0: 65 6c 61 74 65 64 2e 22 29 5d 0a 20 20 20 20 70  elated.")].    p
2a00: 75 62 6c 69 63 20 46 6f 72 65 69 67 6e 4b 65 79  ublic ForeignKey
2a10: 54 6f 49 74 65 6d 20 54 6f 0a 20 20 20 20 7b 0a  ToItem To.    {.
2a20: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
2a30: 72 6e 20 5f 74 6f 3b 20 7d 0a 20 20 20 20 7d 0d  rn _to; }.    }.
2a40: 0a 0d 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e  ...    [DisplayN
2a50: 61 6d 65 28 22 4f 6e 20 55 70 64 61 74 65 22 29  ame("On Update")
2a60: 5d 0d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79  ]..    [Category
2a70: 28 22 41 63 74 69 6f 6e 22 29 5d 0d 0a 20 20 20  ("Action")]..   
2a80: 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54   [Description("T
2a90: 68 65 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  he action to tak
2aa0: 65 20 77 68 65 6e 20 6d 6f 64 69 66 79 69 6e 67  e when modifying
2ab0: 20 74 68 65 20 70 61 72 65 6e 74 20 6b 65 79 20   the parent key 
2ac0: 76 61 6c 75 65 73 20 6f 66 20 61 6e 20 65 78 69  values of an exi
2ad0: 73 74 69 6e 67 20 72 6f 77 2e 22 29 5d 0d 0a 20  sting row.")].. 
2ae0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
2af0: 20 4f 6e 55 70 64 61 74 65 0d 0a 20 20 20 20 7b   OnUpdate..    {
2b00: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 20 7b 20  ..        get { 
2b10: 72 65 74 75 72 6e 20 5f 6f 6e 55 70 64 61 74 65  return _onUpdate
2b20: 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
2b30: 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65 28 22    [DisplayName("
2b40: 4f 6e 20 44 65 6c 65 74 65 22 29 5d 0d 0a 20 20  On Delete")]..  
2b50: 20 20 5b 43 61 74 65 67 6f 72 79 28 22 41 63 74    [Category("Act
2b60: 69 6f 6e 22 29 5d 0d 0a 20 20 20 20 5b 44 65 73  ion")]..    [Des
2b70: 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20 61 63  cription("The ac
2b80: 74 69 6f 6e 20 74 6f 20 74 61 6b 65 20 77 68 65  tion to take whe
2b90: 6e 20 64 65 6c 65 74 69 6e 67 20 61 20 72 6f 77  n deleting a row
2ba0: 20 66 72 6f 6d 20 74 68 65 20 70 61 72 65 6e 74   from the parent
2bb0: 20 74 61 62 6c 65 2e 22 29 5d 0d 0a 20 20 20 20   table.")]..    
2bc0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4f 6e  public string On
2bd0: 44 65 6c 65 74 65 0d 0a 20 20 20 20 7b 0d 0a 20  Delete..    {.. 
2be0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2bf0: 75 72 6e 20 5f 6f 6e 44 65 6c 65 74 65 3b 20 7d  urn _onDelete; }
2c00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 5b  ..    }....    [
2c10: 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 4d 61 74  DisplayName("Mat
2c20: 63 68 22 29 5d 0d 0a 20 20 20 20 5b 43 61 74 65  ch")]..    [Cate
2c30: 67 6f 72 79 28 22 4d 61 74 63 68 22 29 5d 0d 0a  gory("Match")]..
2c40: 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e      [Description
2c50: 28 22 55 73 65 64 20 77 69 74 68 20 63 6f 6d 70  ("Used with comp
2c60: 6f 73 69 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  osite foreign ke
2c70: 79 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 74 6f  y definitions to
2c80: 20 6d 6f 64 69 66 79 20 74 68 65 20 77 61 79 20   modify the way 
2c90: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 74 68 61 74  NULL values that
2ca0: 20 6f 63 63 75 72 20 69 6e 20 63 68 69 6c 64 20   occur in child 
2cb0: 6b 65 79 73 20 61 72 65 20 68 61 6e 64 6c 65 64  keys are handled
2cc0: 2e 20 20 4e 6f 74 20 63 75 72 72 65 6e 74 6c 79  .  Not currently
2cd0: 20 73 75 70 70 6f 72 74 65 64 2e 22 29 5d 0d 0a   supported.")]..
2ce0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
2cf0: 67 20 4d 61 74 63 68 0d 0a 20 20 20 20 7b 0d 0a  g Match..    {..
2d00: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
2d10: 74 75 72 6e 20 5f 6d 61 74 63 68 3b 20 7d 0d 0a  turn _match; }..
2d20: 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69      }..    #regi
2d30: 6f 6e 20 49 43 6c 6f 6e 65 61 62 6c 65 20 4d 65  on ICloneable Me
2d40: 6d 62 65 72 73 0a 0a 20 20 20 20 70 75 62 6c 69  mbers..    publi
2d50: 63 20 6f 62 6a 65 63 74 20 43 6c 6f 6e 65 28 29  c object Clone()
2d60: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
2d70: 75 72 6e 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b  urn new ForeignK
2d80: 65 79 28 74 68 69 73 29 3b 0a 20 20 20 20 7d 0a  ey(this);.    }.
2d90: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a  .    #endregion.
2da0: 20 20 7d 0a 7d                                     }.}