System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 78f05aa5e8495621e003306cfd159650a8dcac3c:


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 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20 2a 20 52  ft.com). * . * R
00b0: 65 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70  eleased to the p
00c0: 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73  ublic domain, us
00d0: 65 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69  e at your own ri
00e0: 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  sk!. ***********
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 2f 0a 0a  *************/..
0120: 6e 61 6d 65 73 70 61 63 65 20 53 51 4c 69 74 65  namespace SQLite
0130: 2e 44 65 73 69 67 6e 65 72 2e 44 65 73 69 67 6e  .Designer.Design
0140: 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  .{.  using Syste
0150: 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  m;.  using Syste
0160: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
0170: 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20 53  neric;.  using S
0180: 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e  ystem.Collection
0190: 73 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  s;.  using Syste
01a0: 6d 2e 54 65 78 74 3b 0a 20 20 75 73 69 6e 67 20  m.Text;.  using 
01b0: 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74  System.Component
01c0: 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e 67 20 53  Model;.  using S
01d0: 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20 20 75 73  ystem.Data;.  us
01e0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01f0: 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69 6e 67 20  Common;.  using 
0200: 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74  System.Component
0210: 4d 6f 64 65 6c 2e 44 65 73 69 67 6e 3b 0a 20 20  Model.Design;.  
0220: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 72 61  using System.Dra
0230: 77 69 6e 67 2e 44 65 73 69 67 6e 3b 0a 20 20 75  wing.Design;.  u
0240: 73 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64  sing System.Wind
0250: 6f 77 73 2e 46 6f 72 6d 73 3b 0a 20 20 75 73 69  ows.Forms;.  usi
0260: 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c  ng System.Global
0270: 69 7a 61 74 69 6f 6e 3b 0a 0a 20 20 69 6e 74 65  ization;..  inte
0280: 72 6e 61 6c 20 63 6c 61 73 73 20 46 6f 72 65 69  rnal class Forei
0290: 67 6e 4b 65 79 45 64 69 74 6f 72 20 3a 20 43 6f  gnKeyEditor : Co
02a0: 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f 72 0a 20  llectionEditor. 
02b0: 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 5f 74 61   {.    Table _ta
02c0: 62 6c 65 3b 0a 20 20 20 20 43 6f 6c 6c 65 63 74  ble;.    Collect
02d0: 69 6f 6e 45 64 69 74 6f 72 2e 43 6f 6c 6c 65 63  ionEditor.Collec
02e0: 74 69 6f 6e 46 6f 72 6d 20 5f 66 6f 72 6d 3b 0a  tionForm _form;.
02f0: 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 5f 69 74      object[] _it
0300: 65 6d 73 3b 0a 20 20 20 20 6f 62 6a 65 63 74 5b  ems;.    object[
0310: 5d 20 5f 6f 72 69 67 3b 0a 20 20 20 20 69 6e 74  ] _orig;.    int
0320: 20 5f 63 6f 75 6e 74 3b 0a 0a 20 20 20 20 69 6e   _count;..    in
0330: 74 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65  ternal ForeignKe
0340: 79 45 64 69 74 6f 72 28 54 61 62 6c 65 20 70 61  yEditor(Table pa
0350: 72 65 6e 74 29 0a 20 20 20 20 20 20 3a 20 62 61  rent).      : ba
0360: 73 65 28 74 79 70 65 6f 66 28 4c 69 73 74 3c 46  se(typeof(List<F
0370: 6f 72 65 69 67 6e 4b 65 79 3e 29 29 0a 20 20 20  oreignKey>)).   
0380: 20 7b 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20   {.      _table 
0390: 3d 20 70 61 72 65 6e 74 3b 0a 20 20 20 20 20 20  = parent;.      
03a0: 5f 63 6f 75 6e 74 20 3d 20 5f 74 61 62 6c 65 2e  _count = _table.
03b0: 46 6f 72 65 69 67 6e 4b 65 79 73 2e 43 6f 75 6e  ForeignKeys.Coun
03c0: 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  t;.    }..    pr
03d0: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
03e0: 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f   CollectionEdito
03f0: 72 2e 43 6f 6c 6c 65 63 74 69 6f 6e 46 6f 72 6d  r.CollectionForm
0400: 20 43 72 65 61 74 65 43 6f 6c 6c 65 63 74 69 6f   CreateCollectio
0410: 6e 46 6f 72 6d 28 29 0a 20 20 20 20 7b 0a 20 20  nForm().    {.  
0420: 20 20 20 20 5f 66 6f 72 6d 20 3d 20 62 61 73 65      _form = base
0430: 2e 43 72 65 61 74 65 43 6f 6c 6c 65 63 74 69 6f  .CreateCollectio
0440: 6e 46 6f 72 6d 28 29 3b 0a 20 20 20 20 20 20 5f  nForm();.      _
0450: 66 6f 72 6d 2e 54 65 78 74 20 3d 20 22 46 6f 72  form.Text = "For
0460: 65 69 67 6e 20 4b 65 79 20 45 64 69 74 6f 72 22  eign Key Editor"
0470: 3b 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ;.      foreach 
0480: 28 43 6f 6e 74 72 6f 6c 20 63 20 69 6e 20 5f 66  (Control c in _f
0490: 6f 72 6d 2e 43 6f 6e 74 72 6f 6c 73 5b 30 5d 2e  orm.Controls[0].
04a0: 43 6f 6e 74 72 6f 6c 73 29 0a 20 20 20 20 20 20  Controls).      
04b0: 7b 0a 20 20 20 20 20 20 20 20 50 72 6f 70 65 72  {.        Proper
04c0: 74 79 47 72 69 64 20 67 72 69 64 20 3d 20 63 20  tyGrid grid = c 
04d0: 61 73 20 50 72 6f 70 65 72 74 79 47 72 69 64 3b  as PropertyGrid;
04e0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 67 72 69  .        if (gri
04f0: 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  d != null).     
0500: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 67     {.          g
0510: 72 69 64 2e 48 65 6c 70 56 69 73 69 62 6c 65 20  rid.HelpVisible 
0520: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
0530: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
0540: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
0550: 20 5f 66 6f 72 6d 2e 57 69 64 74 68 20 3d 20 28   _form.Width = (
0560: 69 6e 74 29 28 5f 66 6f 72 6d 2e 57 69 64 74 68  int)(_form.Width
0570: 20 2a 20 31 2e 32 35 29 3b 0a 20 20 20 20 20 20   * 1.25);.      
0580: 5f 66 6f 72 6d 2e 48 65 69 67 68 74 20 3d 20 28  _form.Height = (
0590: 69 6e 74 29 28 5f 66 6f 72 6d 2e 48 65 69 67 68  int)(_form.Heigh
05a0: 74 20 2a 20 31 2e 32 35 29 3b 0a 0a 20 20 20 20  t * 1.25);..    
05b0: 20 20 72 65 74 75 72 6e 20 5f 66 6f 72 6d 3b 0a    return _form;.
05c0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65      }..    prote
05d0: 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 6f 62  cted override ob
05e0: 6a 65 63 74 20 43 72 65 61 74 65 49 6e 73 74 61  ject CreateInsta
05f0: 6e 63 65 28 54 79 70 65 20 69 74 65 6d 54 79 70  nce(Type itemTyp
0600: 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69  e).    {.      i
0610: 66 20 28 69 74 65 6d 54 79 70 65 20 3d 3d 20 74  f (itemType == t
0620: 79 70 65 6f 66 28 46 6f 72 65 69 67 6e 4b 65 79  ypeof(ForeignKey
0630: 29 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  )).      {.     
0640: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 46 6f     return new Fo
0650: 72 65 69 67 6e 4b 65 79 28 6e 75 6c 6c 2c 20 5f  reignKey(null, _
0660: 74 61 62 6c 65 2c 20 6e 75 6c 6c 29 3b 0a 20 20  table, null);.  
0670: 20 20 20 20 7d 0a 20 20 20 20 20 20 74 68 72 6f      }.      thro
0680: 77 20 6e 65 77 20 4e 6f 74 53 75 70 70 6f 72 74  w new NotSupport
0690: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0a 20  edException();. 
06a0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63     }..    protec
06b0: 74 65 64 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  ted override obj
06c0: 65 63 74 5b 5d 20 47 65 74 49 74 65 6d 73 28 6f  ect[] GetItems(o
06d0: 62 6a 65 63 74 20 65 64 69 74 56 61 6c 75 65 29  bject editValue)
06e0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
06f0: 28 5f 69 74 65 6d 73 20 3d 3d 20 6e 75 6c 6c 29  (_items == null)
0700: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
0710: 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e 4b 65 79   List<ForeignKey
0720: 3e 20 69 74 65 6d 73 20 3d 20 65 64 69 74 56 61  > items = editVa
0730: 6c 75 65 20 61 73 20 4c 69 73 74 3c 46 6f 72 65  lue as List<Fore
0740: 69 67 6e 4b 65 79 3e 3b 0a 20 20 20 20 20 20 20  ignKey>;.       
0750: 20 5f 69 74 65 6d 73 20 3d 20 6e 65 77 20 6f 62   _items = new ob
0760: 6a 65 63 74 5b 69 74 65 6d 73 2e 43 6f 75 6e 74  ject[items.Count
0770: 5d 3b 0a 20 20 20 20 20 20 20 20 5f 6f 72 69 67  ];.        _orig
0780: 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b 69 74   = new object[it
0790: 65 6d 73 2e 43 6f 75 6e 74 5d 3b 0a 20 20 20 20  ems.Count];.    
07a0: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
07b0: 20 30 3b 20 6e 20 3c 20 5f 69 74 65 6d 73 2e 4c   0; n < _items.L
07c0: 65 6e 67 74 68 3b 20 6e 2b 2b 29 0a 20 20 20 20  ength; n++).    
07d0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
07e0: 5f 69 74 65 6d 73 5b 6e 5d 20 3d 20 28 28 49 43  _items[n] = ((IC
07f0: 6c 6f 6e 65 61 62 6c 65 29 69 74 65 6d 73 5b 6e  loneable)items[n
0800: 5d 29 2e 43 6c 6f 6e 65 28 29 3b 0a 20 20 20 20  ]).Clone();.    
0810: 20 20 20 20 20 20 5f 6f 72 69 67 5b 6e 5d 20 3d        _orig[n] =
0820: 20 69 74 65 6d 73 5b 6e 5d 3b 0a 20 20 20 20 20   items[n];.     
0830: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
0840: 20 20 20 72 65 74 75 72 6e 20 5f 69 74 65 6d 73     return _items
0850: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ;.    }..    pro
0860: 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20  tected override 
0870: 6f 62 6a 65 63 74 20 53 65 74 49 74 65 6d 73 28  object SetItems(
0880: 6f 62 6a 65 63 74 20 65 64 69 74 56 61 6c 75 65  object editValue
0890: 2c 20 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65  , object[] value
08a0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 62 6f  ).    {.      bo
08b0: 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65  ol dirty = false
08c0: 3b 0a 20 20 20 20 20 20 69 66 20 28 5f 66 6f 72  ;.      if (_for
08d0: 6d 2e 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 3d  m.DialogResult =
08e0: 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e 43  = DialogResult.C
08f0: 61 6e 63 65 6c 29 20 76 61 6c 75 65 20 3d 20 5f  ancel) value = _
0900: 6f 72 69 67 3b 0a 0a 20 20 20 20 20 20 69 66 20  orig;..      if 
0910: 28 65 64 69 74 56 61 6c 75 65 20 21 3d 20 6e 75  (editValue != nu
0920: 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ll).      {.    
0930: 20 20 20 20 69 66 20 28 21 28 65 64 69 74 56 61      if (!(editVa
0940: 6c 75 65 20 69 73 20 49 4c 69 73 74 29 29 0a 20  lue is IList)). 
0950: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
0960: 20 20 20 72 65 74 75 72 6e 20 65 64 69 74 56 61     return editVa
0970: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  lue;.        }. 
0980: 20 20 20 20 20 20 20 49 4c 69 73 74 20 6c 69 73         IList lis
0990: 74 20 3d 20 28 49 4c 69 73 74 29 65 64 69 74 56  t = (IList)editV
09a0: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 6c 69  alue;.        li
09b0: 73 74 2e 43 6c 65 61 72 28 29 3b 0a 20 20 20 20  st.Clear();.    
09c0: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 20 3d      for (int i =
09d0: 20 30 3b 20 69 20 3c 20 76 61 6c 75 65 2e 4c 65   0; i < value.Le
09e0: 6e 67 74 68 3b 20 69 2b 2b 29 0a 20 20 20 20 20  ngth; i++).     
09f0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 46     {.          F
0a00: 6f 72 65 69 67 6e 4b 65 79 20 66 6b 65 79 20 3d  oreignKey fkey =
0a10: 20 76 61 6c 75 65 5b 69 5d 20 61 73 20 46 6f 72   value[i] as For
0a20: 65 69 67 6e 4b 65 79 3b 0a 0a 20 20 20 20 20 20  eignKey;..      
0a30: 20 20 20 20 69 66 20 28 66 6b 65 79 20 21 3d 20      if (fkey != 
0a40: 6e 75 6c 6c 20 26 26 20 53 74 72 69 6e 67 2e 49  null && String.I
0a50: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 6b 65  sNullOrEmpty(fke
0a60: 79 2e 46 72 6f 6d 2e 43 6f 6c 75 6d 6e 29 20 3d  y.From.Column) =
0a70: 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e  = false && Strin
0a80: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
0a90: 66 6b 65 79 2e 54 6f 2e 43 61 74 61 6c 6f 67 29  fkey.To.Catalog)
0aa0: 20 3d 3d 20 66 61 6c 73 65 20 26 26 0a 20 20 20   == false &&.   
0ab0: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
0ac0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 6b  IsNullOrEmpty(fk
0ad0: 65 79 2e 54 6f 2e 54 61 62 6c 65 29 20 3d 3d 20  ey.To.Table) == 
0ae0: 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e  false && String.
0af0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 6b  IsNullOrEmpty(fk
0b00: 65 79 2e 54 6f 2e 43 6f 6c 75 6d 6e 29 20 3d 3d  ey.To.Column) ==
0b10: 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20   false).        
0b20: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
0b30: 69 66 20 28 66 6b 65 79 2e 49 73 44 69 72 74 79  if (fkey.IsDirty
0b40: 29 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0a  ) dirty = true;.
0b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73  .            lis
0b60: 74 2e 41 64 64 28 76 61 6c 75 65 5b 69 5d 29 3b  t.Add(value[i]);
0b70: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
0b80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
0b90: 66 20 28 28 64 69 72 74 79 20 3d 3d 20 74 72 75  f ((dirty == tru
0ba0: 65 20 7c 7c 20 6c 69 73 74 2e 43 6f 75 6e 74 20  e || list.Count 
0bb0: 21 3d 20 5f 63 6f 75 6e 74 29 20 26 26 20 5f 66  != _count) && _f
0bc0: 6f 72 6d 2e 44 69 61 6c 6f 67 52 65 73 75 6c 74  orm.DialogResult
0bd0: 20 3d 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74   == DialogResult
0be0: 2e 4f 4b 29 0a 20 20 20 20 20 20 20 20 5f 74 61  .OK).        _ta
0bf0: 62 6c 65 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b  ble.MakeDirty();
0c00: 20 20 20 20 20 20 0a 20 20 20 20 20 20 7d 0a 20        .      }. 
0c10: 20 20 20 20 20 72 65 74 75 72 6e 20 65 64 69 74       return edit
0c20: 56 61 6c 75 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  Value;.    }.  }
0c30: 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61  ..  internal cla
0c40: 73 73 20 46 6f 72 65 69 67 6e 4b 65 79 49 74 65  ss ForeignKeyIte
0c50: 6d 20 3a 20 49 48 61 76 65 43 6f 6e 6e 65 63 74  m : IHaveConnect
0c60: 69 6f 6e 53 63 6f 70 65 0a 20 20 7b 0a 20 20 20  ionScope.  {.   
0c70: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
0c80: 5f 63 61 74 61 6c 6f 67 3b 0a 20 20 20 20 70 72  _catalog;.    pr
0c90: 69 76 61 74 65 20 73 74 72 69 6e 67 20 5f 74 61  ivate string _ta
0ca0: 62 6c 65 3b 0a 20 20 20 20 70 72 69 76 61 74 65  ble;.    private
0cb0: 20 73 74 72 69 6e 67 20 5f 63 6f 6c 75 6d 6e 3b   string _column;
0cc0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 46 6f 72  .    private For
0cd0: 65 69 67 6e 4b 65 79 20 5f 66 6b 65 79 3b 0a 0a  eignKey _fkey;..
0ce0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72      internal For
0cf0: 65 69 67 6e 4b 65 79 49 74 65 6d 28 46 6f 72 65  eignKeyItem(Fore
0d00: 69 67 6e 4b 65 79 20 66 6b 65 79 2c 20 73 74 72  ignKey fkey, str
0d10: 69 6e 67 20 63 61 74 61 6c 6f 67 2c 20 73 74 72  ing catalog, str
0d20: 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e  ing table, strin
0d30: 67 20 63 6f 6c 75 6d 6e 29 0a 20 20 20 20 7b 0a  g column).    {.
0d40: 20 20 20 20 20 20 5f 63 61 74 61 6c 6f 67 20 3d        _catalog =
0d50: 20 63 61 74 61 6c 6f 67 3b 0a 20 20 20 20 20 20   catalog;.      
0d60: 5f 74 61 62 6c 65 20 3d 20 74 61 62 6c 65 3b 0a  _table = table;.
0d70: 20 20 20 20 20 20 5f 63 6f 6c 75 6d 6e 20 3d 20        _column = 
0d80: 63 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20 5f 66  column;.      _f
0d90: 6b 65 79 20 3d 20 66 6b 65 79 3b 0a 20 20 20 20  key = fkey;.    
0da0: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  }..    public ov
0db0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f  erride string To
0dc0: 53 74 72 69 6e 67 28 29 0a 20 20 20 20 7b 0a 20  String().    {. 
0dd0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
0de0: 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
0df0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
0e00: 75 6c 74 75 72 65 2c 20 22 5b 7b 30 7d 5d 2e 5b  ulture, "[{0}].[
0e10: 7b 31 7d 5d 2e 5b 7b 32 7d 5d 22 2c 20 5f 63 61  {1}].[{2}]", _ca
0e20: 74 61 6c 6f 67 2c 20 5f 74 61 62 6c 65 2c 20 5f  talog, _table, _
0e30: 63 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 7d 0a 0a  column);.    }..
0e40: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 48 61 76      #region IHav
0e50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4d 65 6d 62  eConnection Memb
0e60: 65 72 73 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61  ers..    [Browsa
0e70: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
0e80: 70 75 62 6c 69 63 20 56 69 65 77 54 61 62 6c 65  public ViewTable
0e90: 42 61 73 65 20 44 65 73 69 67 6e 54 61 62 6c 65  Base DesignTable
0ea0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
0eb0: 20 7b 20 72 65 74 75 72 6e 20 5f 66 6b 65 79 2e   { return _fkey.
0ec0: 44 65 73 69 67 6e 54 61 62 6c 65 3b 20 7d 0a 20  DesignTable; }. 
0ed0: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
0ee0: 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65   DbConnection Ge
0ef0: 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 0a 20 20  tConnection().  
0f00: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
0f10: 20 28 28 49 48 61 76 65 43 6f 6e 6e 65 63 74 69   ((IHaveConnecti
0f20: 6f 6e 29 5f 66 6b 65 79 29 2e 47 65 74 43 6f 6e  on)_fkey).GetCon
0f30: 6e 65 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 7d  nection();.    }
0f40: 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65  ..    [Browsable
0f50: 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75 62  (false)].    pub
0f60: 6c 69 63 20 73 74 72 69 6e 67 20 54 61 62 6c 65  lic string Table
0f70: 53 63 6f 70 65 0a 20 20 20 20 7b 0a 20 20 20 20  Scope.    {.    
0f80: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
0f90: 74 61 62 6c 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a  table; }.    }..
0fa0: 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66      [Browsable(f
0fb0: 61 6c 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69  alse)].    publi
0fc0: 63 20 73 74 72 69 6e 67 20 43 61 74 61 6c 6f 67  c string Catalog
0fd0: 53 63 6f 70 65 0a 20 20 20 20 7b 0a 20 20 20 20  Scope.    {.    
0fe0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
0ff0: 63 61 74 61 6c 6f 67 3b 20 7d 0a 20 20 20 20 7d  catalog; }.    }
1000: 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
1010: 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65  ..    [Browsable
1020: 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 5b 45 64  (false)].    [Ed
1030: 69 74 6f 72 28 74 79 70 65 6f 66 28 43 61 74 61  itor(typeof(Cata
1040: 6c 6f 67 54 79 70 65 45 64 69 74 6f 72 29 2c 20  logTypeEditor), 
1050: 74 79 70 65 6f 66 28 55 49 54 79 70 65 45 64 69  typeof(UITypeEdi
1060: 74 6f 72 29 29 5d 0a 20 20 20 20 70 75 62 6c 69  tor))].    publi
1070: 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67  c virtual string
1080: 20 43 61 74 61 6c 6f 67 0a 20 20 20 20 7b 0a 20   Catalog.    {. 
1090: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
10a0: 6e 20 5f 63 61 74 61 6c 6f 67 3b 20 7d 0a 20 20  n _catalog; }.  
10b0: 20 20 7d 0a 0a 20 20 20 20 5b 45 64 69 74 6f 72    }..    [Editor
10c0: 28 74 79 70 65 6f 66 28 54 61 62 6c 65 73 54 79  (typeof(TablesTy
10d0: 70 65 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f  peEditor), typeo
10e0: 66 28 55 49 54 79 70 65 45 64 69 74 6f 72 29 29  f(UITypeEditor))
10f0: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69 72  ].    public vir
1100: 74 75 61 6c 20 73 74 72 69 6e 67 20 54 61 62 6c  tual string Tabl
1110: 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  e.    {.      ge
1120: 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 61 62 6c  t { return _tabl
1130: 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  e; }.    }..    
1140: 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43  [Editor(typeof(C
1150: 6f 6c 75 6d 6e 73 54 79 70 65 45 64 69 74 6f 72  olumnsTypeEditor
1160: 29 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65  ), typeof(UIType
1170: 45 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 70 75  Editor))].    pu
1180: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
1190: 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 7b  ing Column.    {
11a0: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
11b0: 75 72 6e 20 5f 63 6f 6c 75 6d 6e 3b 20 7d 0a 20  urn _column; }. 
11c0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63     }..    protec
11d0: 74 65 64 20 76 6f 69 64 20 53 65 74 43 61 74 61  ted void SetCata
11e0: 6c 6f 67 28 73 74 72 69 6e 67 20 76 61 6c 75 65  log(string value
11f0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
1200: 20 28 5f 63 61 74 61 6c 6f 67 20 21 3d 20 76 61   (_catalog != va
1210: 6c 75 65 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  lue).      {.   
1220: 20 20 20 20 20 5f 63 61 74 61 6c 6f 67 20 3d 20       _catalog = 
1230: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 5f  value;.        _
1240: 66 6b 65 79 2e 4d 61 6b 65 44 69 72 74 79 28 29  fkey.MakeDirty()
1250: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1260: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76  .    protected v
1270: 6f 69 64 20 53 65 74 54 61 62 6c 65 28 73 74 72  oid SetTable(str
1280: 69 6e 67 20 76 61 6c 75 65 29 0a 20 20 20 20 7b  ing value).    {
1290: 0a 20 20 20 20 20 20 69 66 20 28 5f 74 61 62 6c  .      if (_tabl
12a0: 65 20 21 3d 20 76 61 6c 75 65 29 0a 20 20 20 20  e != value).    
12b0: 20 20 7b 0a 20 20 20 20 20 20 20 20 5f 74 61 62    {.        _tab
12c0: 6c 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20  le = value;.    
12d0: 20 20 20 20 5f 66 6b 65 79 2e 4d 61 6b 65 44 69      _fkey.MakeDi
12e0: 72 74 79 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rty();.      }. 
12f0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63     }..    protec
1300: 74 65 64 20 76 6f 69 64 20 53 65 74 43 6f 6c 75  ted void SetColu
1310: 6d 6e 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29  mn(string value)
1320: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
1330: 28 5f 63 6f 6c 75 6d 6e 20 21 3d 20 76 61 6c 75  (_column != valu
1340: 65 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  e).      {.     
1350: 20 20 20 5f 63 6f 6c 75 6d 6e 20 3d 20 76 61 6c     _column = val
1360: 75 65 3b 0a 20 20 20 20 20 20 20 20 5f 66 6b 65  ue;.        _fke
1370: 79 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20  y.MakeDirty();. 
1380: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
1390: 0a 0a 20 20 5b 54 79 70 65 43 6f 6e 76 65 72 74  ..  [TypeConvert
13a0: 65 72 28 74 79 70 65 6f 66 28 45 78 70 61 6e 64  er(typeof(Expand
13b0: 61 62 6c 65 4f 62 6a 65 63 74 43 6f 6e 76 65 72  ableObjectConver
13c0: 74 65 72 29 29 5d 0a 20 20 69 6e 74 65 72 6e 61  ter))].  interna
13d0: 6c 20 63 6c 61 73 73 20 46 6f 72 65 69 67 6e 4b  l class ForeignK
13e0: 65 79 46 72 6f 6d 49 74 65 6d 20 3a 20 46 6f 72  eyFromItem : For
13f0: 65 69 67 6e 4b 65 79 49 74 65 6d 0a 20 20 7b 0a  eignKeyItem.  {.
1400: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72      internal For
1410: 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74 65 6d 28  eignKeyFromItem(
1420: 46 6f 72 65 69 67 6e 4b 65 79 20 66 6b 65 79 2c  ForeignKey fkey,
1430: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 29 0a   string column).
1440: 20 20 20 20 20 20 3a 20 62 61 73 65 28 66 6b 65        : base(fke
1450: 79 2c 20 66 6b 65 79 2e 5f 74 61 62 6c 65 2e 43  y, fkey._table.C
1460: 61 74 61 6c 6f 67 2c 20 66 6b 65 79 2e 5f 74 61  atalog, fkey._ta
1470: 62 6c 65 2e 4e 61 6d 65 2c 20 63 6f 6c 75 6d 6e  ble.Name, column
1480: 29 0a 20 20 20 20 7b 0a 20 20 20 20 7d 0a 0a 20  ).    {.    }.. 
1490: 20 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f     [Editor(typeo
14a0: 66 28 43 6f 6c 75 6d 6e 73 54 79 70 65 45 64 69  f(ColumnsTypeEdi
14b0: 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49 54  tor), typeof(UIT
14c0: 79 70 65 45 64 69 74 6f 72 29 29 5d 0a 20 20 20  ypeEditor))].   
14d0: 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54   [Description("T
14e0: 68 65 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  he column of the
14f0: 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20 74   current table t
1500: 68 61 74 20 72 65 66 65 72 73 20 74 6f 20 74 68  hat refers to th
1510: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 72 65  e foreign key re
1520: 6c 61 74 69 6f 6e 73 68 69 70 22 29 5d 0a 20 20  lationship")].  
1530: 20 20 70 75 62 6c 69 63 20 6e 65 77 20 73 74 72    public new str
1540: 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 7b  ing Column.    {
1550: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
1560: 75 72 6e 20 62 61 73 65 2e 43 6f 6c 75 6d 6e 3b  urn base.Column;
1570: 20 7d 0a 20 20 20 20 20 20 73 65 74 20 7b 20 53   }.      set { S
1580: 65 74 43 6f 6c 75 6d 6e 28 76 61 6c 75 65 29 3b  etColumn(value);
1590: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42   }.    }..    [B
15a0: 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d  rowsable(false)]
15b0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
15c0: 72 69 64 65 20 73 74 72 69 6e 67 20 43 61 74 61  ride string Cata
15d0: 6c 6f 67 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  log.    {.      
15e0: 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  get.      {.    
15f0: 20 20 20 20 72 65 74 75 72 6e 20 62 61 73 65 2e      return base.
1600: 43 61 74 61 6c 6f 67 3b 0a 20 20 20 20 20 20 7d  Catalog;.      }
1610: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f  .    }..    [Bro
1620: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20  wsable(false)]. 
1630: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
1640: 64 65 20 73 74 72 69 6e 67 20 54 61 62 6c 65 0a  de string Table.
1650: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a      {.      get.
1660: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1670: 72 65 74 75 72 6e 20 62 61 73 65 2e 44 65 73 69  return base.Desi
1680: 67 6e 54 61 62 6c 65 2e 4e 61 6d 65 3b 0a 20 20  gnTable.Name;.  
1690: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
16a0: 0a 20 20 5b 54 79 70 65 43 6f 6e 76 65 72 74 65  .  [TypeConverte
16b0: 72 28 74 79 70 65 6f 66 28 45 78 70 61 6e 64 61  r(typeof(Expanda
16c0: 62 6c 65 4f 62 6a 65 63 74 43 6f 6e 76 65 72 74  bleObjectConvert
16d0: 65 72 29 29 5d 0a 20 20 69 6e 74 65 72 6e 61 6c  er))].  internal
16e0: 20 63 6c 61 73 73 20 46 6f 72 65 69 67 6e 4b 65   class ForeignKe
16f0: 79 54 6f 49 74 65 6d 20 3a 20 46 6f 72 65 69 67  yToItem : Foreig
1700: 6e 4b 65 79 49 74 65 6d 0a 20 20 7b 0a 20 20 20  nKeyItem.  {.   
1710: 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69 67   internal Foreig
1720: 6e 4b 65 79 54 6f 49 74 65 6d 28 46 6f 72 65 69  nKeyToItem(Forei
1730: 67 6e 4b 65 79 20 66 6b 65 79 2c 20 73 74 72 69  gnKey fkey, stri
1740: 6e 67 20 63 61 74 61 6c 6f 67 2c 20 73 74 72 69  ng catalog, stri
1750: 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67  ng table, string
1760: 20 63 6f 6c 75 6d 6e 29 0a 20 20 20 20 20 20 3a   column).      :
1770: 20 62 61 73 65 28 66 6b 65 79 2c 20 63 61 74 61   base(fkey, cata
1780: 6c 6f 67 2c 20 74 61 62 6c 65 2c 20 63 6f 6c 75  log, table, colu
1790: 6d 6e 29 0a 20 20 20 20 7b 0a 20 20 20 20 7d 0a  mn).    {.    }.
17a0: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
17b0: 66 61 6c 73 65 29 5d 0a 20 20 20 20 5b 45 64 69  false)].    [Edi
17c0: 74 6f 72 28 74 79 70 65 6f 66 28 43 61 74 61 6c  tor(typeof(Catal
17d0: 6f 67 54 79 70 65 45 64 69 74 6f 72 29 2c 20 74  ogTypeEditor), t
17e0: 79 70 65 6f 66 28 55 49 54 79 70 65 45 64 69 74  ypeof(UITypeEdit
17f0: 6f 72 29 29 5d 0a 20 20 20 20 5b 44 65 73 63 72  or))].    [Descr
1800: 69 70 74 69 6f 6e 28 22 54 68 65 20 64 61 74 61  iption("The data
1810: 62 61 73 65 20 63 61 74 61 6c 6f 67 20 28 6d 61  base catalog (ma
1820: 69 6e 2c 20 74 65 6d 70 2c 20 6f 72 20 74 68 65  in, temp, or the
1830: 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61 74 74 61   name of an atta
1840: 63 68 65 64 20 64 61 74 61 62 61 73 65 29 20 74  ched database) t
1850: 6f 20 77 68 69 63 68 20 74 68 65 20 66 6f 72 65  o which the fore
1860: 69 67 6e 20 6b 65 79 20 72 65 66 65 72 73 2e 22  ign key refers."
1870: 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6e 65  )].    public ne
1880: 77 20 73 74 72 69 6e 67 20 43 61 74 61 6c 6f 67  w string Catalog
1890: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
18a0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
18b0: 20 72 65 74 75 72 6e 20 62 61 73 65 2e 43 61 74   return base.Cat
18c0: 61 6c 6f 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20  alog;.      }.  
18d0: 20 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a      set.      {.
18e0: 20 20 20 20 20 20 20 20 53 65 74 43 61 74 61 6c          SetCatal
18f0: 6f 67 28 76 61 6c 75 65 29 3b 0a 20 20 20 20 20  og(value);.     
1900: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 44   }.    }..    [D
1910: 69 73 70 6c 61 79 4e 61 6d 65 28 22 42 61 73 65  isplayName("Base
1920: 20 54 61 62 6c 65 22 29 5d 0a 20 20 20 20 5b 45   Table")].    [E
1930: 64 69 74 6f 72 28 74 79 70 65 6f 66 28 54 61 62  ditor(typeof(Tab
1940: 6c 65 73 54 79 70 65 45 64 69 74 6f 72 29 2c 20  lesTypeEditor), 
1950: 74 79 70 65 6f 66 28 55 49 54 79 70 65 45 64 69  typeof(UITypeEdi
1960: 74 6f 72 29 29 5d 0a 20 20 20 20 5b 44 65 73 63  tor))].    [Desc
1970: 72 69 70 74 69 6f 6e 28 22 54 68 65 20 74 61 62  ription("The tab
1980: 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  le to which the 
1990: 66 6f 72 65 69 67 6e 20 6b 65 79 20 72 65 66 65  foreign key refe
19a0: 72 73 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c 69  rs.")].    publi
19b0: 63 20 6e 65 77 20 73 74 72 69 6e 67 20 54 61 62  c new string Tab
19c0: 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  le.    {.      g
19d0: 65 74 20 7b 20 72 65 74 75 72 6e 20 62 61 73 65  et { return base
19e0: 2e 54 61 62 6c 65 3b 20 7d 0a 20 20 20 20 20 20  .Table; }.      
19f0: 73 65 74 20 7b 20 53 65 74 54 61 62 6c 65 28 76  set { SetTable(v
1a00: 61 6c 75 65 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a  alue); }.    }..
1a10: 20 20 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65      [Editor(type
1a20: 6f 66 28 43 6f 6c 75 6d 6e 73 54 79 70 65 45 64  of(ColumnsTypeEd
1a30: 69 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49  itor), typeof(UI
1a40: 54 79 70 65 45 64 69 74 6f 72 29 29 5d 0a 20 20  TypeEditor))].  
1a50: 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22    [Description("
1a60: 54 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 77 68  The column to wh
1a70: 69 63 68 20 74 68 65 20 66 6f 72 65 69 67 6e 20  ich the foreign 
1a80: 6b 65 79 20 72 65 66 65 72 73 2e 22 29 5d 0a 20  key refers.")]. 
1a90: 20 20 20 70 75 62 6c 69 63 20 6e 65 77 20 73 74     public new st
1aa0: 72 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20 20 20 20  ring Column.    
1ab0: 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  {.      get { re
1ac0: 74 75 72 6e 20 62 61 73 65 2e 43 6f 6c 75 6d 6e  turn base.Column
1ad0: 3b 20 7d 0a 20 20 20 20 20 20 73 65 74 20 7b 20  ; }.      set { 
1ae0: 53 65 74 43 6f 6c 75 6d 6e 28 76 61 6c 75 65 29  SetColumn(value)
1af0: 3b 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ; }.    }.  }.. 
1b00: 20 5b 44 65 66 61 75 6c 74 50 72 6f 70 65 72 74   [DefaultPropert
1b10: 79 28 22 46 72 6f 6d 22 29 5d 0a 20 20 69 6e 74  y("From")].  int
1b20: 65 72 6e 61 6c 20 63 6c 61 73 73 20 46 6f 72 65  ernal class Fore
1b30: 69 67 6e 4b 65 79 20 3a 20 49 48 61 76 65 43 6f  ignKey : IHaveCo
1b40: 6e 6e 65 63 74 69 6f 6e 2c 20 49 43 6c 6f 6e 65  nnection, IClone
1b50: 61 62 6c 65 0a 20 20 7b 0a 20 20 20 20 69 6e 74  able.  {.    int
1b60: 65 72 6e 61 6c 20 54 61 62 6c 65 20 5f 74 61 62  ernal Table _tab
1b70: 6c 65 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  le;..    interna
1b80: 6c 20 69 6e 74 20 5f 69 64 3b 0d 0a 20 20 20 20  l int _id;..    
1b90: 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20 5f 6f 72  internal int _or
1ba0: 64 69 6e 61 6c 3b 0a 20 20 20 20 69 6e 74 65 72  dinal;.    inter
1bb0: 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65 79 46 72  nal ForeignKeyFr
1bc0: 6f 6d 49 74 65 6d 20 5f 66 72 6f 6d 3b 0a 20 20  omItem _from;.  
1bd0: 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69    internal Forei
1be0: 67 6e 4b 65 79 54 6f 49 74 65 6d 20 5f 74 6f 3b  gnKeyToItem _to;
1bf0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
1c00: 72 69 6e 67 20 5f 6e 61 6d 65 3b 0d 0a 20 20 20  ring _name;..   
1c10: 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e 67   internal string
1c20: 20 5f 6f 6e 55 70 64 61 74 65 3b 0d 0a 20 20 20   _onUpdate;..   
1c30: 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e 67   internal string
1c40: 20 5f 6f 6e 44 65 6c 65 74 65 3b 0d 0a 20 20 20   _onDelete;..   
1c50: 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e 67   internal string
1c60: 20 5f 6d 61 74 63 68 3b 0a 20 20 20 20 70 72 69   _match;.    pri
1c70: 76 61 74 65 20 62 6f 6f 6c 20 5f 64 69 72 74 79  vate bool _dirty
1c80: 3b 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 46  ;..    private F
1c90: 6f 72 65 69 67 6e 4b 65 79 28 46 6f 72 65 69 67  oreignKey(Foreig
1ca0: 6e 4b 65 79 20 73 6f 75 72 63 65 29 0a 20 20 20  nKey source).   
1cb0: 20 7b 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20   {.      _table 
1cc0: 3d 20 73 6f 75 72 63 65 2e 5f 74 61 62 6c 65 3b  = source._table;
1cd0: 0d 0a 20 20 20 20 20 20 5f 69 64 20 3d 20 73 6f  ..      _id = so
1ce0: 75 72 63 65 2e 5f 69 64 3b 0d 0a 20 20 20 20 20  urce._id;..     
1cf0: 20 5f 6f 72 64 69 6e 61 6c 20 3d 20 73 6f 75 72   _ordinal = sour
1d00: 63 65 2e 5f 6f 72 64 69 6e 61 6c 3b 0a 20 20 20  ce._ordinal;.   
1d10: 20 20 20 5f 66 72 6f 6d 20 3d 20 6e 65 77 20 46     _from = new F
1d20: 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74 65  oreignKeyFromIte
1d30: 6d 28 74 68 69 73 2c 20 73 6f 75 72 63 65 2e 5f  m(this, source._
1d40: 66 72 6f 6d 2e 43 6f 6c 75 6d 6e 29 3b 0a 20 20  from.Column);.  
1d50: 20 20 20 20 5f 74 6f 20 3d 20 6e 65 77 20 46 6f      _to = new Fo
1d60: 72 65 69 67 6e 4b 65 79 54 6f 49 74 65 6d 28 74  reignKeyToItem(t
1d70: 68 69 73 2c 20 73 6f 75 72 63 65 2e 5f 74 6f 2e  his, source._to.
1d80: 43 61 74 61 6c 6f 67 2c 20 73 6f 75 72 63 65 2e  Catalog, source.
1d90: 5f 74 6f 2e 54 61 62 6c 65 2c 20 73 6f 75 72 63  _to.Table, sourc
1da0: 65 2e 5f 74 6f 2e 43 6f 6c 75 6d 6e 29 3b 0a 20  e._to.Column);. 
1db0: 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20 73 6f 75       _name = sou
1dc0: 72 63 65 2e 5f 6e 61 6d 65 3b 0d 0a 20 20 20 20  rce._name;..    
1dd0: 20 20 5f 6f 6e 55 70 64 61 74 65 20 3d 20 73 6f    _onUpdate = so
1de0: 75 72 63 65 2e 5f 6f 6e 55 70 64 61 74 65 3b 0d  urce._onUpdate;.
1df0: 0a 20 20 20 20 20 20 5f 6f 6e 44 65 6c 65 74 65  .      _onDelete
1e00: 20 3d 20 73 6f 75 72 63 65 2e 5f 6f 6e 44 65 6c   = source._onDel
1e10: 65 74 65 3b 0d 0a 20 20 20 20 20 20 5f 6d 61 74  ete;..      _mat
1e20: 63 68 20 3d 20 73 6f 75 72 63 65 2e 5f 6d 61 74  ch = source._mat
1e30: 63 68 3b 0a 20 20 20 20 20 20 5f 64 69 72 74 79  ch;.      _dirty
1e40: 20 3d 20 73 6f 75 72 63 65 2e 5f 64 69 72 74 79   = source._dirty
1e50: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74  ;.    }..    int
1e60: 65 72 6e 61 6c 20 76 6f 69 64 20 4d 61 6b 65 44  ernal void MakeD
1e70: 69 72 74 79 28 29 0a 20 20 20 20 7b 0a 20 20 20  irty().    {.   
1e80: 20 20 20 5f 64 69 72 74 79 20 3d 20 74 72 75 65     _dirty = true
1e90: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72  ;.    }..    [Br
1ea0: 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a  owsable(false)].
1eb0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f 6f      internal boo
1ec0: 6c 20 49 73 44 69 72 74 79 0a 20 20 20 20 7b 0a  l IsDirty.    {.
1ed0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1ee0: 72 6e 20 5f 64 69 72 74 79 3b 20 7d 0a 20 20 20  rn _dirty; }.   
1ef0: 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c   }..    internal
1f00: 20 76 6f 69 64 20 43 6c 65 61 72 44 69 72 74 79   void ClearDirty
1f10: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  ().    {.      _
1f20: 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0a 20  dirty = false;. 
1f30: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e     }..    intern
1f40: 61 6c 20 46 6f 72 65 69 67 6e 4b 65 79 28 44 62  al ForeignKey(Db
1f50: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20  Connection cnn, 
1f60: 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 44 61 74  Table table, Dat
1f70: 61 52 6f 77 20 72 6f 77 29 0a 20 20 20 20 7b 0a  aRow row).    {.
1f80: 20 20 20 20 20 20 5f 74 61 62 6c 65 20 3d 20 74        _table = t
1f90: 61 62 6c 65 3b 0a 20 20 20 20 20 20 69 66 20 28  able;.      if (
1fa0: 72 6f 77 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  row != null).   
1fb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 69     {..        _i
1fc0: 64 20 3d 20 28 69 6e 74 29 72 6f 77 5b 22 46 4b  d = (int)row["FK
1fd0: 45 59 5f 49 44 22 5d 3b 0d 0a 20 20 20 20 20 20  EY_ID"];..      
1fe0: 20 20 5f 6f 72 64 69 6e 61 6c 20 3d 20 28 69 6e    _ordinal = (in
1ff0: 74 29 72 6f 77 5b 22 46 4b 45 59 5f 46 52 4f 4d  t)row["FKEY_FROM
2000: 5f 4f 52 44 49 4e 41 4c 5f 50 4f 53 49 54 49 4f  _ORDINAL_POSITIO
2010: 4e 22 5d 3b 0a 20 20 20 20 20 20 20 20 5f 66 72  N"];.        _fr
2020: 6f 6d 20 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e  om = new Foreign
2030: 4b 65 79 46 72 6f 6d 49 74 65 6d 28 74 68 69 73  KeyFromItem(this
2040: 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 46 52 4f 4d  , row["FKEY_FROM
2050: 5f 43 4f 4c 55 4d 4e 22 5d 2e 54 6f 53 74 72 69  _COLUMN"].ToStri
2060: 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20 20 5f  ng());.        _
2070: 74 6f 20 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e  to = new Foreign
2080: 4b 65 79 54 6f 49 74 65 6d 28 74 68 69 73 2c 20  KeyToItem(this, 
2090: 72 6f 77 5b 22 46 4b 45 59 5f 54 4f 5f 43 41 54  row["FKEY_TO_CAT
20a0: 41 4c 4f 47 22 5d 2e 54 6f 53 74 72 69 6e 67 28  ALOG"].ToString(
20b0: 29 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 54 4f 5f  ), row["FKEY_TO_
20c0: 54 41 42 4c 45 22 5d 2e 54 6f 53 74 72 69 6e 67  TABLE"].ToString
20d0: 28 29 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 54 4f  (), row["FKEY_TO
20e0: 5f 43 4f 4c 55 4d 4e 22 5d 2e 54 6f 53 74 72 69  _COLUMN"].ToStri
20f0: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
2100: 5f 6e 61 6d 65 20 3d 20 72 6f 77 5b 22 43 4f 4e  _name = row["CON
2110: 53 54 52 41 49 4e 54 5f 4e 41 4d 45 22 5d 2e 54  STRAINT_NAME"].T
2120: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
2130: 20 20 20 20 5f 6f 6e 55 70 64 61 74 65 20 3d 20      _onUpdate = 
2140: 72 6f 77 5b 22 46 4b 45 59 5f 4f 4e 5f 55 50 44  row["FKEY_ON_UPD
2150: 41 54 45 22 5d 2e 54 6f 53 74 72 69 6e 67 28 29  ATE"].ToString()
2160: 3b 0d 0a 20 20 20 20 20 20 20 20 5f 6f 6e 44 65  ;..        _onDe
2170: 6c 65 74 65 20 3d 20 72 6f 77 5b 22 46 4b 45 59  lete = row["FKEY
2180: 5f 4f 4e 5f 44 45 4c 45 54 45 22 5d 2e 54 6f 53  _ON_DELETE"].ToS
2190: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
21a0: 20 20 5f 6d 61 74 63 68 20 3d 20 72 6f 77 5b 22    _match = row["
21b0: 46 4b 45 59 5f 4d 41 54 43 48 22 5d 2e 54 6f 53  FKEY_MATCH"].ToS
21c0: 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 7d  tring();.      }
21d0: 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20  .      else.    
21e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 69 64    {..        _id
21f0: 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20   = -1;..        
2200: 5f 6f 72 64 69 6e 61 6c 20 3d 20 2d 31 3b 0a 20  _ordinal = -1;. 
2210: 20 20 20 20 20 20 20 5f 66 72 6f 6d 20 3d 20 6e         _from = n
2220: 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f  ew ForeignKeyFro
2230: 6d 49 74 65 6d 28 74 68 69 73 2c 20 22 22 29 3b  mItem(this, "");
2240: 0a 20 20 20 20 20 20 20 20 5f 74 6f 20 3d 20 6e  .        _to = n
2250: 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 54 6f 49  ew ForeignKeyToI
2260: 74 65 6d 28 74 68 69 73 2c 20 5f 74 61 62 6c 65  tem(this, _table
2270: 2e 43 61 74 61 6c 6f 67 2c 20 22 22 2c 20 22 22  .Catalog, "", ""
2280: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2290: 0a 0a 20 20 20 20 2f 2f 69 6e 74 65 72 6e 61 6c  ..    //internal
22a0: 20 76 6f 69 64 20 57 72 69 74 65 53 71 6c 28 53   void WriteSql(S
22b0: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62 75 69  tringBuilder bui
22c0: 6c 64 65 72 29 0a 20 20 20 20 2f 2f 7b 0a 20 20  lder).    //{.  
22d0: 20 20 2f 2f 20 20 69 66 20 28 53 74 72 69 6e 67    //  if (String
22e0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f  .IsNullOrEmpty(_
22f0: 66 72 6f 6d 2e 43 6f 6c 75 6d 6e 29 20 3d 3d 20  from.Column) == 
2300: 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e  false && String.
2310: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f 74  IsNullOrEmpty(_t
2320: 6f 2e 43 61 74 61 6c 6f 67 29 20 3d 3d 20 66 61  o.Catalog) == fa
2330: 6c 73 65 20 26 26 0a 20 20 20 20 2f 2f 20 20 20  lse &&.    //   
2340: 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
2350: 45 6d 70 74 79 28 5f 74 6f 2e 54 61 62 6c 65 29  Empty(_to.Table)
2360: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
2370: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2380: 79 28 5f 74 6f 2e 43 6f 6c 75 6d 6e 29 20 3d 3d  y(_to.Column) ==
2390: 20 66 61 6c 73 65 29 0a 20 20 20 20 2f 2f 20 20   false).    //  
23a0: 7b 0a 20 20 20 20 2f 2f 20 20 20 20 62 75 69 6c  {.    //    buil
23b0: 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74  der.AppendFormat
23c0: 28 22 43 4f 4e 53 54 52 41 49 4e 54 20 5b 7b 30  ("CONSTRAINT [{0
23d0: 7d 5d 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 28  }] FOREIGN KEY (
23e0: 5b 7b 31 7d 5d 29 20 52 45 46 45 52 45 4e 43 45  [{1}]) REFERENCE
23f0: 53 20 5b 7b 33 7d 5d 20 28 5b 7b 34 7d 5d 29 22  S [{3}] ([{4}])"
2400: 2c 20 4e 61 6d 65 2c 20 5f 66 72 6f 6d 2e 43 6f  , Name, _from.Co
2410: 6c 75 6d 6e 2c 20 5f 74 6f 2e 43 61 74 61 6c 6f  lumn, _to.Catalo
2420: 67 2c 20 5f 74 6f 2e 54 61 62 6c 65 2c 20 5f 74  g, _to.Table, _t
2430: 6f 2e 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 2f  o.Column);.    /
2440: 2f 20 20 7d 0a 20 20 20 20 2f 2f 7d 0a 0a 20 20  /  }.    //}..  
2450: 20 20 5b 50 61 72 65 6e 74 68 65 73 69 7a 65 50    [ParenthesizeP
2460: 72 6f 70 65 72 74 79 4e 61 6d 65 28 74 72 75 65  ropertyName(true
2470: 29 5d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79  )].    [Category
2480: 28 22 49 64 65 6e 74 69 74 79 22 29 5d 0a 20 20  ("Identity")].  
2490: 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22    [Description("
24a0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
24b0: 66 6f 72 65 69 67 6e 20 6b 65 79 2e 22 29 5d 0a  foreign key.")].
24c0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
24d0: 67 20 4e 61 6d 65 0a 20 20 20 20 7b 0a 20 20 20  g Name.    {.   
24e0: 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20     get.      {. 
24f0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
2500: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
2510: 5f 6e 61 6d 65 29 20 3d 3d 20 66 61 6c 73 65 29  _name) == false)
2520: 20 72 65 74 75 72 6e 20 5f 6e 61 6d 65 3b 0a 0a   return _name;..
2530: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2540: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
2550: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
2560: 6e 74 43 75 6c 74 75 72 65 2c 20 22 46 4b 5f 7b  ntCulture, "FK_{
2570: 30 7d 5f 7b 31 7d 5f 7b 32 7d 22 2c 20 5f 66 72  0}_{1}_{2}", _fr
2580: 6f 6d 2e 54 61 62 6c 65 2c 20 5f 69 64 2c 20 5f  om.Table, _id, _
2590: 6f 72 64 69 6e 61 6c 29 3b 0a 20 20 20 20 20 20  ordinal);.      
25a0: 7d 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20 20  }.      set.    
25b0: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
25c0: 5f 6e 61 6d 65 20 21 3d 20 76 61 6c 75 65 29 0a  _name != value).
25d0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
25e0: 20 20 20 20 5f 6e 61 6d 65 20 3d 20 76 61 6c 75      _name = valu
25f0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 4d 61 6b  e;.          Mak
2600: 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20 20 20  eDirty();.      
2610: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
2620: 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  }..    #region I
2630: 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4d  HaveConnection M
2640: 65 6d 62 65 72 73 0a 0a 20 20 20 20 5b 42 72 6f  embers..    [Bro
2650: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20  wsable(false)]. 
2660: 20 20 20 70 75 62 6c 69 63 20 56 69 65 77 54 61     public ViewTa
2670: 62 6c 65 42 61 73 65 20 44 65 73 69 67 6e 54 61  bleBase DesignTa
2680: 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ble.    {.      
2690: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 61  get { return _ta
26a0: 62 6c 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  ble; }.    }..  
26b0: 20 20 70 75 62 6c 69 63 20 44 62 43 6f 6e 6e 65    public DbConne
26c0: 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74  ction GetConnect
26d0: 69 6f 6e 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ion().    {.    
26e0: 20 20 72 65 74 75 72 6e 20 28 28 49 48 61 76 65    return ((IHave
26f0: 43 6f 6e 6e 65 63 74 69 6f 6e 29 5f 74 61 62 6c  Connection)_tabl
2700: 65 29 2e 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  e).GetConnection
2710: 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  ();.    }..    #
2720: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2730: 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 49   [DisplayName("I
2740: 64 22 29 5d 0d 0a 20 20 20 20 5b 43 61 74 65 67  d")]..    [Categ
2750: 6f 72 79 28 22 49 64 22 29 5d 0d 0a 20 20 20 20  ory("Id")]..    
2760: 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68  [Description("Th
2770: 65 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  e identifier of 
2780: 74 68 69 73 20 66 6f 72 65 69 67 6e 20 6b 65 79  this foreign key
2790: 2e 22 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63  .")]..    public
27a0: 20 69 6e 74 20 49 64 0d 0a 20 20 20 20 7b 0d 0a   int Id..    {..
27b0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
27c0: 72 6e 20 5f 69 64 3b 20 7d 0d 0a 20 20 20 20 7d  rn _id; }..    }
27d0: 0d 0a 0d 0a 20 20 20 20 5b 44 69 73 70 6c 61 79  ....    [Display
27e0: 4e 61 6d 65 28 22 4f 72 64 69 6e 61 6c 22 29 5d  Name("Ordinal")]
27f0: 0d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28  ..    [Category(
2800: 22 4f 72 64 69 6e 61 6c 22 29 5d 0d 0a 20 20 20  "Ordinal")]..   
2810: 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54   [Description("T
2820: 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 64 69 6e 61  he column ordina
2830: 6c 20 6f 66 20 74 68 69 73 20 66 6f 72 65 69 67  l of this foreig
2840: 6e 20 6b 65 79 2e 22 29 5d 0d 0a 20 20 20 20 70  n key.")]..    p
2850: 75 62 6c 69 63 20 69 6e 74 20 4f 72 64 69 6e 61  ublic int Ordina
2860: 6c 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  l..    {..      
2870: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 6f 72  get { return _or
2880: 64 69 6e 61 6c 3b 20 7d 0d 0a 20 20 20 20 7d 0a  dinal; }..    }.
2890: 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d  .    [DisplayNam
28a0: 65 28 22 46 72 6f 6d 20 4b 65 79 22 29 5d 0a 20  e("From Key")]. 
28b0: 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 46 72     [Category("Fr
28c0: 6f 6d 22 29 5d 0a 20 20 20 20 5b 44 65 73 63 72  om")].    [Descr
28d0: 69 70 74 69 6f 6e 28 22 54 68 65 20 73 6f 75 72  iption("The sour
28e0: 63 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ce column in the
28f0: 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20 74   current table t
2900: 68 61 74 20 72 65 66 65 72 73 20 74 6f 20 74 68  hat refers to th
2910: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 22 29  e foreign key.")
2920: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 46 6f 72  ].    public For
2930: 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74 65 6d 20  eignKeyFromItem 
2940: 46 72 6f 6d 0a 20 20 20 20 7b 0a 20 20 20 20 20  From.    {.     
2950: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66   get { return _f
2960: 72 6f 6d 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  rom; }.    }..  
2970: 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65 28 22    [DisplayName("
2980: 54 6f 20 4b 65 79 22 29 5d 0a 20 20 20 20 5b 43  To Key")].    [C
2990: 61 74 65 67 6f 72 79 28 22 54 6f 22 29 5d 0a 20  ategory("To")]. 
29a0: 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28     [Description(
29b0: 22 54 68 65 20 74 61 62 6c 65 20 61 6e 64 20 63  "The table and c
29c0: 6f 6c 75 6d 6e 20 74 6f 20 77 68 69 63 68 20 74  olumn to which t
29d0: 68 65 20 73 70 65 63 69 66 69 65 64 20 66 72 6f  he specified fro
29e0: 6d 20 63 6f 6c 75 6d 6e 20 69 73 20 72 65 6c 61  m column is rela
29f0: 74 65 64 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c  ted.")].    publ
2a00: 69 63 20 46 6f 72 65 69 67 6e 4b 65 79 54 6f 49  ic ForeignKeyToI
2a10: 74 65 6d 20 54 6f 0a 20 20 20 20 7b 0a 20 20 20  tem To.    {.   
2a20: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2a30: 5f 74 6f 3b 20 7d 0a 20 20 20 20 7d 0d 0a 0d 0a  _to; }.    }....
2a40: 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65      [DisplayName
2a50: 28 22 4f 6e 20 55 70 64 61 74 65 22 29 5d 0d 0a  ("On Update")]..
2a60: 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 41      [Category("A
2a70: 63 74 69 6f 6e 22 29 5d 0d 0a 20 20 20 20 5b 44  ction")]..    [D
2a80: 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20  escription("The 
2a90: 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 20 77  action to take w
2aa0: 68 65 6e 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  hen modifying th
2ab0: 65 20 70 61 72 65 6e 74 20 6b 65 79 20 76 61 6c  e parent key val
2ac0: 75 65 73 20 6f 66 20 61 6e 20 65 78 69 73 74 69  ues of an existi
2ad0: 6e 67 20 72 6f 77 2e 22 29 5d 0d 0a 20 20 20 20  ng row.")]..    
2ae0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4f 6e  public string On
2af0: 55 70 64 61 74 65 0d 0a 20 20 20 20 7b 0d 0a 20  Update..    {.. 
2b00: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2b10: 75 72 6e 20 5f 6f 6e 55 70 64 61 74 65 3b 20 7d  urn _onUpdate; }
2b20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 5b  ..    }....    [
2b30: 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 4f 6e 20  DisplayName("On 
2b40: 44 65 6c 65 74 65 22 29 5d 0d 0a 20 20 20 20 5b  Delete")]..    [
2b50: 43 61 74 65 67 6f 72 79 28 22 41 63 74 69 6f 6e  Category("Action
2b60: 22 29 5d 0d 0a 20 20 20 20 5b 44 65 73 63 72 69  ")]..    [Descri
2b70: 70 74 69 6f 6e 28 22 54 68 65 20 61 63 74 69 6f  ption("The actio
2b80: 6e 20 74 6f 20 74 61 6b 65 20 77 68 65 6e 20 64  n to take when d
2b90: 65 6c 65 74 69 6e 67 20 61 20 72 6f 77 20 66 72  eleting a row fr
2ba0: 6f 6d 20 74 68 65 20 70 61 72 65 6e 74 20 74 61  om the parent ta
2bb0: 62 6c 65 2e 22 29 5d 0d 0a 20 20 20 20 70 75 62  ble.")]..    pub
2bc0: 6c 69 63 20 73 74 72 69 6e 67 20 4f 6e 44 65 6c  lic string OnDel
2bd0: 65 74 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ete..    {..    
2be0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2bf0: 20 5f 6f 6e 44 65 6c 65 74 65 3b 20 7d 0d 0a 20   _onDelete; }.. 
2c00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 5b 44 69 73     }....    [Dis
2c10: 70 6c 61 79 4e 61 6d 65 28 22 4d 61 74 63 68 22  playName("Match"
2c20: 29 5d 0d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72  )]..    [Categor
2c30: 79 28 22 4d 61 74 63 68 22 29 5d 0d 0a 20 20 20  y("Match")]..   
2c40: 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 55   [Description("U
2c50: 73 65 64 20 77 69 74 68 20 63 6f 6d 70 6f 73 69  sed with composi
2c60: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 64  te foreign key d
2c70: 65 66 69 6e 69 74 69 6f 6e 73 20 74 6f 20 6d 6f  efinitions to mo
2c80: 64 69 66 79 20 74 68 65 20 77 61 79 20 4e 55 4c  dify the way NUL
2c90: 4c 20 76 61 6c 75 65 73 20 74 68 61 74 20 6f 63  L values that oc
2ca0: 63 75 72 20 69 6e 20 63 68 69 6c 64 20 6b 65 79  cur in child key
2cb0: 73 20 61 72 65 20 68 61 6e 64 6c 65 64 2e 20 20  s are handled.  
2cc0: 4e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75  Not currently su
2cd0: 70 70 6f 72 74 65 64 2e 22 29 5d 0d 0a 20 20 20  pported.")]..   
2ce0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4d   public string M
2cf0: 61 74 63 68 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  atch..    {..   
2d00: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2d10: 6e 20 5f 6d 61 74 63 68 3b 20 7d 0d 0a 20 20 20  n _match; }..   
2d20: 20 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20   }..    #region 
2d30: 49 43 6c 6f 6e 65 61 62 6c 65 20 4d 65 6d 62 65  ICloneable Membe
2d40: 72 73 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  rs..    public o
2d50: 62 6a 65 63 74 20 43 6c 6f 6e 65 28 29 0a 20 20  bject Clone().  
2d60: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
2d70: 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 28   new ForeignKey(
2d80: 74 68 69 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  this);.    }..  
2d90: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 20 20 7d    #endregion.  }
2da0: 0a 7d                                            .}