System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6c596e4c175c203bd3405d2b99f042c755a96fd6:


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 0a 20  indows.Forms;.. 
0260: 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20   internal class 
0270: 46 6f 72 65 69 67 6e 4b 65 79 45 64 69 74 6f 72  ForeignKeyEditor
0280: 20 3a 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69   : CollectionEdi
0290: 74 6f 72 0a 20 20 7b 0a 20 20 20 20 54 61 62 6c  tor.  {.    Tabl
02a0: 65 20 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 6f  e _table;.    Co
02b0: 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f 72 2e 43  llectionEditor.C
02c0: 6f 6c 6c 65 63 74 69 6f 6e 46 6f 72 6d 20 5f 66  ollectionForm _f
02d0: 6f 72 6d 3b 0a 20 20 20 20 6f 62 6a 65 63 74 5b  orm;.    object[
02e0: 5d 20 5f 69 74 65 6d 73 3b 0a 20 20 20 20 6f 62  ] _items;.    ob
02f0: 6a 65 63 74 5b 5d 20 5f 6f 72 69 67 3b 0a 20 20  ject[] _orig;.  
0300: 20 20 69 6e 74 20 5f 63 6f 75 6e 74 3b 0a 0a 20    int _count;.. 
0310: 20 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65     internal Fore
0320: 69 67 6e 4b 65 79 45 64 69 74 6f 72 28 54 61 62  ignKeyEditor(Tab
0330: 6c 65 20 70 61 72 65 6e 74 29 0a 20 20 20 20 20  le parent).     
0340: 20 3a 20 62 61 73 65 28 74 79 70 65 6f 66 28 4c   : base(typeof(L
0350: 69 73 74 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 29  ist<ForeignKey>)
0360: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 74  ).    {.      _t
0370: 61 62 6c 65 20 3d 20 70 61 72 65 6e 74 3b 0a 20  able = parent;. 
0380: 20 20 20 20 20 5f 63 6f 75 6e 74 20 3d 20 5f 74       _count = _t
0390: 61 62 6c 65 2e 46 6f 72 65 69 67 6e 4b 65 79 73  able.ForeignKeys
03a0: 2e 43 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20  .Count;.    }.. 
03b0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65     protected ove
03c0: 72 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e  rride Collection
03d0: 45 64 69 74 6f 72 2e 43 6f 6c 6c 65 63 74 69 6f  Editor.Collectio
03e0: 6e 46 6f 72 6d 20 43 72 65 61 74 65 43 6f 6c 6c  nForm CreateColl
03f0: 65 63 74 69 6f 6e 46 6f 72 6d 28 29 0a 20 20 20  ectionForm().   
0400: 20 7b 0a 20 20 20 20 20 20 5f 66 6f 72 6d 20 3d   {.      _form =
0410: 20 62 61 73 65 2e 43 72 65 61 74 65 43 6f 6c 6c   base.CreateColl
0420: 65 63 74 69 6f 6e 46 6f 72 6d 28 29 3b 0a 20 20  ectionForm();.  
0430: 20 20 20 20 5f 66 6f 72 6d 2e 54 65 78 74 20 3d      _form.Text =
0440: 20 22 46 6f 72 65 69 67 6e 20 4b 65 79 20 45 64   "Foreign Key Ed
0450: 69 74 6f 72 22 3b 0a 20 20 20 20 20 20 66 6f 72  itor";.      for
0460: 65 61 63 68 20 28 43 6f 6e 74 72 6f 6c 20 63 20  each (Control c 
0470: 69 6e 20 5f 66 6f 72 6d 2e 43 6f 6e 74 72 6f 6c  in _form.Control
0480: 73 5b 30 5d 2e 43 6f 6e 74 72 6f 6c 73 29 0a 20  s[0].Controls). 
0490: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 50       {.        P
04a0: 72 6f 70 65 72 74 79 47 72 69 64 20 67 72 69 64  ropertyGrid grid
04b0: 20 3d 20 63 20 61 73 20 50 72 6f 70 65 72 74 79   = c as Property
04c0: 47 72 69 64 3b 0a 20 20 20 20 20 20 20 20 69 66  Grid;.        if
04d0: 20 28 67 72 69 64 20 21 3d 20 6e 75 6c 6c 29 0a   (grid != null).
04e0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
04f0: 20 20 20 20 67 72 69 64 2e 48 65 6c 70 56 69 73      grid.HelpVis
0500: 69 62 6c 65 20 3d 20 74 72 75 65 3b 0a 20 20 20  ible = true;.   
0510: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0520: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
0530: 20 20 20 20 20 20 5f 66 6f 72 6d 2e 57 69 64 74        _form.Widt
0540: 68 20 3d 20 28 69 6e 74 29 28 5f 66 6f 72 6d 2e  h = (int)(_form.
0550: 57 69 64 74 68 20 2a 20 31 2e 32 35 29 3b 0a 20  Width * 1.25);. 
0560: 20 20 20 20 20 5f 66 6f 72 6d 2e 48 65 69 67 68       _form.Heigh
0570: 74 20 3d 20 28 69 6e 74 29 28 5f 66 6f 72 6d 2e  t = (int)(_form.
0580: 48 65 69 67 68 74 20 2a 20 31 2e 32 35 29 3b 0a  Height * 1.25);.
0590: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66  .      return _f
05a0: 6f 72 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  orm;.    }..    
05b0: 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69  protected overri
05c0: 64 65 20 6f 62 6a 65 63 74 20 43 72 65 61 74 65  de object Create
05d0: 49 6e 73 74 61 6e 63 65 28 54 79 70 65 20 69 74  Instance(Type it
05e0: 65 6d 54 79 70 65 29 0a 20 20 20 20 7b 0a 20 20  emType).    {.  
05f0: 20 20 20 20 69 66 20 28 69 74 65 6d 54 79 70 65      if (itemType
0600: 20 3d 3d 20 74 79 70 65 6f 66 28 46 6f 72 65 69   == typeof(Forei
0610: 67 6e 4b 65 79 29 29 0a 20 20 20 20 20 20 7b 0a  gnKey)).      {.
0620: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
0630: 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 28 6e 75  ew ForeignKey(nu
0640: 6c 6c 2c 20 5f 74 61 62 6c 65 2c 20 6e 75 6c 6c  ll, _table, null
0650: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
0660: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 53 75   throw new NotSu
0670: 70 70 6f 72 74 65 64 45 78 63 65 70 74 69 6f 6e  pportedException
0680: 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ();.    }..    p
0690: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
06a0: 65 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74 49 74  e object[] GetIt
06b0: 65 6d 73 28 6f 62 6a 65 63 74 20 65 64 69 74 56  ems(object editV
06c0: 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  alue).    {.    
06d0: 20 20 69 66 20 28 5f 69 74 65 6d 73 20 3d 3d 20    if (_items == 
06e0: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20  null).      {.  
06f0: 20 20 20 20 20 20 4c 69 73 74 3c 46 6f 72 65 69        List<Forei
0700: 67 6e 4b 65 79 3e 20 69 74 65 6d 73 20 3d 20 65  gnKey> items = e
0710: 64 69 74 56 61 6c 75 65 20 61 73 20 4c 69 73 74  ditValue as List
0720: 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 3b 0a 20 20  <ForeignKey>;.  
0730: 20 20 20 20 20 20 5f 69 74 65 6d 73 20 3d 20 6e        _items = n
0740: 65 77 20 6f 62 6a 65 63 74 5b 69 74 65 6d 73 2e  ew object[items.
0750: 43 6f 75 6e 74 5d 3b 0a 20 20 20 20 20 20 20 20  Count];.        
0760: 5f 6f 72 69 67 20 3d 20 6e 65 77 20 6f 62 6a 65  _orig = new obje
0770: 63 74 5b 69 74 65 6d 73 2e 43 6f 75 6e 74 5d 3b  ct[items.Count];
0780: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
0790: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 69 74  t n = 0; n < _it
07a0: 65 6d 73 2e 4c 65 6e 67 74 68 3b 20 6e 2b 2b 29  ems.Length; n++)
07b0: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
07c0: 20 20 20 20 20 5f 69 74 65 6d 73 5b 6e 5d 20 3d       _items[n] =
07d0: 20 28 28 49 43 6c 6f 6e 65 61 62 6c 65 29 69 74   ((ICloneable)it
07e0: 65 6d 73 5b 6e 5d 29 2e 43 6c 6f 6e 65 28 29 3b  ems[n]).Clone();
07f0: 0a 20 20 20 20 20 20 20 20 20 20 5f 6f 72 69 67  .          _orig
0800: 5b 6e 5d 20 3d 20 69 74 65 6d 73 5b 6e 5d 3b 0a  [n] = items[n];.
0810: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0820: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  }.      return _
0830: 69 74 65 6d 73 3b 0a 20 20 20 20 7d 0a 0a 20 20  items;.    }..  
0840: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
0850: 72 69 64 65 20 6f 62 6a 65 63 74 20 53 65 74 49  ride object SetI
0860: 74 65 6d 73 28 6f 62 6a 65 63 74 20 65 64 69 74  tems(object edit
0870: 56 61 6c 75 65 2c 20 6f 62 6a 65 63 74 5b 5d 20  Value, object[] 
0880: 76 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20  value).    {.   
0890: 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20     bool dirty = 
08a0: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 69 66 20  false;.      if 
08b0: 28 5f 66 6f 72 6d 2e 44 69 61 6c 6f 67 52 65 73  (_form.DialogRes
08c0: 75 6c 74 20 3d 3d 20 44 69 61 6c 6f 67 52 65 73  ult == DialogRes
08d0: 75 6c 74 2e 43 61 6e 63 65 6c 29 20 76 61 6c 75  ult.Cancel) valu
08e0: 65 20 3d 20 5f 6f 72 69 67 3b 0a 0a 20 20 20 20  e = _orig;..    
08f0: 20 20 69 66 20 28 65 64 69 74 56 61 6c 75 65 20    if (editValue 
0900: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b  != null).      {
0910: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
0920: 67 74 68 20 3d 20 74 68 69 73 2e 47 65 74 49 74  gth = this.GetIt
0930: 65 6d 73 28 65 64 69 74 56 61 6c 75 65 29 2e 4c  ems(editValue).L
0940: 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 20 20 69  ength;.        i
0950: 6e 74 20 6e 75 6d 32 20 3d 20 76 61 6c 75 65 2e  nt num2 = value.
0960: 4c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 20 20  Length;.        
0970: 69 66 20 28 21 28 65 64 69 74 56 61 6c 75 65 20  if (!(editValue 
0980: 69 73 20 49 4c 69 73 74 29 29 0a 20 20 20 20 20  is IList)).     
0990: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72     {.          r
09a0: 65 74 75 72 6e 20 65 64 69 74 56 61 6c 75 65 3b  eturn editValue;
09b0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
09c0: 20 20 20 49 4c 69 73 74 20 6c 69 73 74 20 3d 20     IList list = 
09d0: 28 49 4c 69 73 74 29 65 64 69 74 56 61 6c 75 65  (IList)editValue
09e0: 3b 0a 20 20 20 20 20 20 20 20 6c 69 73 74 2e 43  ;.        list.C
09f0: 6c 65 61 72 28 29 3b 0a 20 20 20 20 20 20 20 20  lear();.        
0a00: 66 6f 72 20 28 69 6e 74 20 69 20 3d 20 30 3b 20  for (int i = 0; 
0a10: 69 20 3c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  i < value.Length
0a20: 3b 20 69 2b 2b 29 0a 20 20 20 20 20 20 20 20 7b  ; i++).        {
0a30: 0a 20 20 20 20 20 20 20 20 20 20 46 6f 72 65 69  .          Forei
0a40: 67 6e 4b 65 79 20 66 6b 65 79 20 3d 20 76 61 6c  gnKey fkey = val
0a50: 75 65 5b 69 5d 20 61 73 20 46 6f 72 65 69 67 6e  ue[i] as Foreign
0a60: 4b 65 79 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  Key;..          
0a70: 69 66 20 28 66 6b 65 79 20 21 3d 20 6e 75 6c 6c  if (fkey != null
0a80: 20 26 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c   && String.IsNul
0a90: 6c 4f 72 45 6d 70 74 79 28 66 6b 65 79 2e 46 72  lOrEmpty(fkey.Fr
0aa0: 6f 6d 2e 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61  om.Column) == fa
0ab0: 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e 49 73  lse && String.Is
0ac0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 6b 65 79  NullOrEmpty(fkey
0ad0: 2e 54 6f 2e 43 61 74 61 6c 6f 67 29 20 3d 3d 20  .To.Catalog) == 
0ae0: 66 61 6c 73 65 20 26 26 0a 20 20 20 20 20 20 20  false &&.       
0af0: 20 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e 75       String.IsNu
0b00: 6c 6c 4f 72 45 6d 70 74 79 28 66 6b 65 79 2e 54  llOrEmpty(fkey.T
0b10: 6f 2e 54 61 62 6c 65 29 20 3d 3d 20 66 61 6c 73  o.Table) == fals
0b20: 65 20 26 26 20 53 74 72 69 6e 67 2e 49 73 4e 75  e && String.IsNu
0b30: 6c 6c 4f 72 45 6d 70 74 79 28 66 6b 65 79 2e 54  llOrEmpty(fkey.T
0b40: 6f 2e 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c  o.Column) == fal
0b50: 73 65 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  se).          {.
0b60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
0b70: 66 6b 65 79 2e 49 73 44 69 72 74 79 29 20 64 69  fkey.IsDirty) di
0b80: 72 74 79 20 3d 20 74 72 75 65 3b 0a 0a 20 20 20  rty = true;..   
0b90: 20 20 20 20 20 20 20 20 20 6c 69 73 74 2e 41 64           list.Ad
0ba0: 64 28 76 61 6c 75 65 5b 69 5d 29 3b 0a 20 20 20  d(value[i]);.   
0bb0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0bc0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28   }.        if ((
0bd0: 64 69 72 74 79 20 3d 3d 20 74 72 75 65 20 7c 7c  dirty == true ||
0be0: 20 6c 69 73 74 2e 43 6f 75 6e 74 20 21 3d 20 5f   list.Count != _
0bf0: 63 6f 75 6e 74 29 20 26 26 20 5f 66 6f 72 6d 2e  count) && _form.
0c00: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 3d 3d 20  DialogResult == 
0c10: 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 29  DialogResult.OK)
0c20: 0a 20 20 20 20 20 20 20 20 5f 74 61 62 6c 65 2e  .        _table.
0c30: 4d 61 6b 65 44 69 72 74 79 28 29 3b 20 20 20 20  MakeDirty();    
0c40: 20 20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20    .      }.     
0c50: 20 72 65 74 75 72 6e 20 65 64 69 74 56 61 6c 75   return editValu
0c60: 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  e;.    }.  }..  
0c70: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 46  internal class F
0c80: 6f 72 65 69 67 6e 4b 65 79 49 74 65 6d 20 3a 20  oreignKeyItem : 
0c90: 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 53  IHaveConnectionS
0ca0: 63 6f 70 65 0a 20 20 7b 0a 20 20 20 20 70 72 69  cope.  {.    pri
0cb0: 76 61 74 65 20 73 74 72 69 6e 67 20 5f 63 61 74  vate string _cat
0cc0: 61 6c 6f 67 3b 0a 20 20 20 20 70 72 69 76 61 74  alog;.    privat
0cd0: 65 20 73 74 72 69 6e 67 20 5f 74 61 62 6c 65 3b  e string _table;
0ce0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72  .    private str
0cf0: 69 6e 67 20 5f 63 6f 6c 75 6d 6e 3b 0a 20 20 20  ing _column;.   
0d00: 20 70 72 69 76 61 74 65 20 46 6f 72 65 69 67 6e   private Foreign
0d10: 4b 65 79 20 5f 66 6b 65 79 3b 0a 0a 20 20 20 20  Key _fkey;..    
0d20: 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e  internal Foreign
0d30: 4b 65 79 49 74 65 6d 28 46 6f 72 65 69 67 6e 4b  KeyItem(ForeignK
0d40: 65 79 20 66 6b 65 79 2c 20 73 74 72 69 6e 67 20  ey fkey, string 
0d50: 63 61 74 61 6c 6f 67 2c 20 73 74 72 69 6e 67 20  catalog, string 
0d60: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
0d70: 6c 75 6d 6e 29 0a 20 20 20 20 7b 0a 20 20 20 20  lumn).    {.    
0d80: 20 20 5f 63 61 74 61 6c 6f 67 20 3d 20 63 61 74    _catalog = cat
0d90: 61 6c 6f 67 3b 0a 20 20 20 20 20 20 5f 74 61 62  alog;.      _tab
0da0: 6c 65 20 3d 20 74 61 62 6c 65 3b 0a 20 20 20 20  le = table;.    
0db0: 20 20 5f 63 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75    _column = colu
0dc0: 6d 6e 3b 0a 20 20 20 20 20 20 5f 66 6b 65 79 20  mn;.      _fkey 
0dd0: 3d 20 66 6b 65 79 3b 0a 20 20 20 20 7d 0a 0a 20  = fkey;.    }.. 
0de0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
0df0: 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69  de string ToStri
0e00: 6e 67 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ng().    {.     
0e10: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
0e20: 6f 72 6d 61 74 28 22 5b 7b 30 7d 5d 2e 5b 7b 31  ormat("[{0}].[{1
0e30: 7d 5d 2e 5b 7b 32 7d 5d 22 2c 20 5f 63 61 74 61  }].[{2}]", _cata
0e40: 6c 6f 67 2c 20 5f 74 61 62 6c 65 2c 20 5f 63 6f  log, _table, _co
0e50: 6c 75 6d 6e 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  lumn);.    }..  
0e60: 20 20 23 72 65 67 69 6f 6e 20 49 48 61 76 65 43    #region IHaveC
0e70: 6f 6e 6e 65 63 74 69 6f 6e 20 4d 65 6d 62 65 72  onnection Member
0e80: 73 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  s..    [Browsabl
0e90: 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75  e(false)].    pu
0ea0: 62 6c 69 63 20 56 69 65 77 54 61 62 6c 65 42 61  blic ViewTableBa
0eb0: 73 65 20 44 65 73 69 67 6e 54 61 62 6c 65 0a 20  se DesignTable. 
0ec0: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
0ed0: 20 72 65 74 75 72 6e 20 5f 66 6b 65 79 2e 44 65   return _fkey.De
0ee0: 73 69 67 6e 54 61 62 6c 65 3b 20 7d 0a 20 20 20  signTable; }.   
0ef0: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 44   }..    public D
0f00: 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43  bConnection GetC
0f10: 6f 6e 6e 65 63 74 69 6f 6e 28 29 0a 20 20 20 20  onnection().    
0f20: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  {.      return (
0f30: 28 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e  (IHaveConnection
0f40: 29 5f 66 6b 65 79 29 2e 47 65 74 43 6f 6e 6e 65  )_fkey).GetConne
0f50: 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 7d 0a 0a  ction();.    }..
0f60: 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66      [Browsable(f
0f70: 61 6c 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69  alse)].    publi
0f80: 63 20 73 74 72 69 6e 67 20 54 61 62 6c 65 53 63  c string TableSc
0f90: 6f 70 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ope.    {.      
0fa0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 61  get { return _ta
0fb0: 62 6c 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  ble; }.    }..  
0fc0: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
0fd0: 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  se)].    public 
0fe0: 73 74 72 69 6e 67 20 43 61 74 61 6c 6f 67 53 63  string CatalogSc
0ff0: 6f 70 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ope.    {.      
1000: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 63 61  get { return _ca
1010: 74 61 6c 6f 67 3b 20 7d 0a 20 20 20 20 7d 0a 0a  talog; }.    }..
1020: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a      #endregion..
1030: 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66      [Browsable(f
1040: 61 6c 73 65 29 5d 0a 20 20 20 20 5b 45 64 69 74  alse)].    [Edit
1050: 6f 72 28 74 79 70 65 6f 66 28 43 61 74 61 6c 6f  or(typeof(Catalo
1060: 67 54 79 70 65 45 64 69 74 6f 72 29 2c 20 74 79  gTypeEditor), ty
1070: 70 65 6f 66 28 55 49 54 79 70 65 45 64 69 74 6f  peof(UITypeEdito
1080: 72 29 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  r))].    public 
1090: 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 43  virtual string C
10a0: 61 74 61 6c 6f 67 0a 20 20 20 20 7b 0a 20 20 20  atalog.    {.   
10b0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
10c0: 5f 63 61 74 61 6c 6f 67 3b 20 7d 0a 20 20 20 20  _catalog; }.    
10d0: 7d 0a 0a 20 20 20 20 5b 45 64 69 74 6f 72 28 74  }..    [Editor(t
10e0: 79 70 65 6f 66 28 54 61 62 6c 65 73 54 79 70 65  ypeof(TablesType
10f0: 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66 28  Editor), typeof(
1100: 55 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d 0a  UITypeEditor))].
1110: 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75      public virtu
1120: 61 6c 20 73 74 72 69 6e 67 20 54 61 62 6c 65 0a  al string Table.
1130: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
1140: 7b 20 72 65 74 75 72 6e 20 5f 74 61 62 6c 65 3b  { return _table;
1150: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 45   }.    }..    [E
1160: 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43 6f 6c  ditor(typeof(Col
1170: 75 6d 6e 73 54 79 70 65 45 64 69 74 6f 72 29 2c  umnsTypeEditor),
1180: 20 74 79 70 65 6f 66 28 55 49 54 79 70 65 45 64   typeof(UITypeEd
1190: 69 74 6f 72 29 29 5d 0a 20 20 20 20 70 75 62 6c  itor))].    publ
11a0: 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ic virtual strin
11b0: 67 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 7b 0a 20  g Column.    {. 
11c0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
11d0: 6e 20 5f 63 6f 6c 75 6d 6e 3b 20 7d 0a 20 20 20  n _column; }.   
11e0: 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63 74 65   }..    protecte
11f0: 64 20 76 6f 69 64 20 53 65 74 43 61 74 61 6c 6f  d void SetCatalo
1200: 67 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0a  g(string value).
1210: 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28      {.      if (
1220: 5f 63 61 74 61 6c 6f 67 20 21 3d 20 76 61 6c 75  _catalog != valu
1230: 65 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  e).      {.     
1240: 20 20 20 5f 63 61 74 61 6c 6f 67 20 3d 20 76 61     _catalog = va
1250: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 5f 66 6b  lue;.        _fk
1260: 65 79 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a  ey.MakeDirty();.
1270: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
1280: 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 6f 69     protected voi
1290: 64 20 53 65 74 54 61 62 6c 65 28 73 74 72 69 6e  d SetTable(strin
12a0: 67 20 76 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20  g value).    {. 
12b0: 20 20 20 20 20 69 66 20 28 5f 74 61 62 6c 65 20       if (_table 
12c0: 21 3d 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20  != value).      
12d0: 7b 0a 20 20 20 20 20 20 20 20 5f 74 61 62 6c 65  {.        _table
12e0: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
12f0: 20 20 5f 66 6b 65 79 2e 4d 61 6b 65 44 69 72 74    _fkey.MakeDirt
1300: 79 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  y();.      }.   
1310: 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63 74 65   }..    protecte
1320: 64 20 76 6f 69 64 20 53 65 74 43 6f 6c 75 6d 6e  d void SetColumn
1330: 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0a 20  (string value). 
1340: 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f     {.      if (_
1350: 63 6f 6c 75 6d 6e 20 21 3d 20 76 61 6c 75 65 29  column != value)
1360: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
1370: 20 5f 63 6f 6c 75 6d 6e 20 3d 20 76 61 6c 75 65   _column = value
1380: 3b 0a 20 20 20 20 20 20 20 20 5f 66 6b 65 79 2e  ;.        _fkey.
1390: 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20  MakeDirty();.   
13a0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
13b0: 20 20 5b 54 79 70 65 43 6f 6e 76 65 72 74 65 72    [TypeConverter
13c0: 28 74 79 70 65 6f 66 28 45 78 70 61 6e 64 61 62  (typeof(Expandab
13d0: 6c 65 4f 62 6a 65 63 74 43 6f 6e 76 65 72 74 65  leObjectConverte
13e0: 72 29 29 5d 0a 20 20 69 6e 74 65 72 6e 61 6c 20  r))].  internal 
13f0: 63 6c 61 73 73 20 46 6f 72 65 69 67 6e 4b 65 79  class ForeignKey
1400: 46 72 6f 6d 49 74 65 6d 20 3a 20 46 6f 72 65 69  FromItem : Forei
1410: 67 6e 4b 65 79 49 74 65 6d 0a 20 20 7b 0a 20 20  gnKeyItem.  {.  
1420: 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69    internal Forei
1430: 67 6e 4b 65 79 46 72 6f 6d 49 74 65 6d 28 46 6f  gnKeyFromItem(Fo
1440: 72 65 69 67 6e 4b 65 79 20 66 6b 65 79 2c 20 73  reignKey fkey, s
1450: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 29 0a 20 20  tring column).  
1460: 20 20 20 20 3a 20 62 61 73 65 28 66 6b 65 79 2c      : base(fkey,
1470: 20 66 6b 65 79 2e 5f 74 61 62 6c 65 2e 43 61 74   fkey._table.Cat
1480: 61 6c 6f 67 2c 20 66 6b 65 79 2e 5f 74 61 62 6c  alog, fkey._tabl
1490: 65 2e 4e 61 6d 65 2c 20 63 6f 6c 75 6d 6e 29 0a  e.Name, column).
14a0: 20 20 20 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20      {.    }..   
14b0: 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28   [Editor(typeof(
14c0: 43 6f 6c 75 6d 6e 73 54 79 70 65 45 64 69 74 6f  ColumnsTypeEdito
14d0: 72 29 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70  r), typeof(UITyp
14e0: 65 45 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 5b  eEditor))].    [
14f0: 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65  Description("The
1500: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 63   column of the c
1510: 75 72 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61  urrent table tha
1520: 74 20 72 65 66 65 72 73 20 74 6f 20 74 68 65 20  t refers to the 
1530: 66 6f 72 65 69 67 6e 20 6b 65 79 20 72 65 6c 61  foreign key rela
1540: 74 69 6f 6e 73 68 69 70 22 29 5d 0a 20 20 20 20  tionship")].    
1550: 70 75 62 6c 69 63 20 6e 65 77 20 73 74 72 69 6e  public new strin
1560: 67 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 7b 0a 20  g Column.    {. 
1570: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1580: 6e 20 62 61 73 65 2e 43 6f 6c 75 6d 6e 3b 20 7d  n base.Column; }
1590: 0a 20 20 20 20 20 20 73 65 74 20 7b 20 53 65 74  .      set { Set
15a0: 43 6f 6c 75 6d 6e 28 76 61 6c 75 65 29 3b 20 7d  Column(value); }
15b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f  .    }..    [Bro
15c0: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20  wsable(false)]. 
15d0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
15e0: 64 65 20 73 74 72 69 6e 67 20 43 61 74 61 6c 6f  de string Catalo
15f0: 67 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  g.    {.      ge
1600: 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t.      {.      
1610: 20 20 72 65 74 75 72 6e 20 62 61 73 65 2e 43 61    return base.Ca
1620: 74 61 6c 6f 67 3b 0a 20 20 20 20 20 20 7d 0a 20  talog;.      }. 
1630: 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73     }..    [Brows
1640: 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20  able(false)].   
1650: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
1660: 20 73 74 72 69 6e 67 20 54 61 62 6c 65 0a 20 20   string Table.  
1670: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20    {.      get.  
1680: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65      {.        re
1690: 74 75 72 6e 20 62 61 73 65 2e 44 65 73 69 67 6e  turn base.Design
16a0: 54 61 62 6c 65 2e 4e 61 6d 65 3b 0a 20 20 20 20  Table.Name;.    
16b0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
16c0: 20 5b 54 79 70 65 43 6f 6e 76 65 72 74 65 72 28   [TypeConverter(
16d0: 74 79 70 65 6f 66 28 45 78 70 61 6e 64 61 62 6c  typeof(Expandabl
16e0: 65 4f 62 6a 65 63 74 43 6f 6e 76 65 72 74 65 72  eObjectConverter
16f0: 29 29 5d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63  ))].  internal c
1700: 6c 61 73 73 20 46 6f 72 65 69 67 6e 4b 65 79 54  lass ForeignKeyT
1710: 6f 49 74 65 6d 20 3a 20 46 6f 72 65 69 67 6e 4b  oItem : ForeignK
1720: 65 79 49 74 65 6d 0a 20 20 7b 0a 20 20 20 20 69  eyItem.  {.    i
1730: 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e 4b  nternal ForeignK
1740: 65 79 54 6f 49 74 65 6d 28 46 6f 72 65 69 67 6e  eyToItem(Foreign
1750: 4b 65 79 20 66 6b 65 79 2c 20 73 74 72 69 6e 67  Key fkey, string
1760: 20 63 61 74 61 6c 6f 67 2c 20 73 74 72 69 6e 67   catalog, string
1770: 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63   table, string c
1780: 6f 6c 75 6d 6e 29 0a 20 20 20 20 20 20 3a 20 62  olumn).      : b
1790: 61 73 65 28 66 6b 65 79 2c 20 63 61 74 61 6c 6f  ase(fkey, catalo
17a0: 67 2c 20 74 61 62 6c 65 2c 20 63 6f 6c 75 6d 6e  g, table, column
17b0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 7d 0a 0a 20  ).    {.    }.. 
17c0: 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61     [Browsable(fa
17d0: 6c 73 65 29 5d 0a 20 20 20 20 5b 45 64 69 74 6f  lse)].    [Edito
17e0: 72 28 74 79 70 65 6f 66 28 43 61 74 61 6c 6f 67  r(typeof(Catalog
17f0: 54 79 70 65 45 64 69 74 6f 72 29 2c 20 74 79 70  TypeEditor), typ
1800: 65 6f 66 28 55 49 54 79 70 65 45 64 69 74 6f 72  eof(UITypeEditor
1810: 29 29 5d 0a 20 20 20 20 5b 44 65 73 63 72 69 70  ))].    [Descrip
1820: 74 69 6f 6e 28 22 54 68 65 20 64 61 74 61 62 61  tion("The databa
1830: 73 65 20 63 61 74 61 6c 6f 67 20 28 6d 61 69 6e  se catalog (main
1840: 2c 20 74 65 6d 70 2c 20 6f 72 20 74 68 65 20 6e  , temp, or the n
1850: 61 6d 65 20 6f 66 20 61 6e 20 61 74 74 61 63 68  ame of an attach
1860: 65 64 20 64 61 74 61 62 61 73 65 29 20 74 6f 20  ed database) to 
1870: 77 68 69 63 68 20 74 68 65 20 66 6f 72 65 69 67  which the foreig
1880: 6e 20 6b 65 79 20 72 65 66 65 72 73 2e 22 29 5d  n key refers.")]
1890: 0a 20 20 20 20 70 75 62 6c 69 63 20 6e 65 77 20  .    public new 
18a0: 73 74 72 69 6e 67 20 43 61 74 61 6c 6f 67 0a 20  string Catalog. 
18b0: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20     {.      get. 
18c0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72       {.        r
18d0: 65 74 75 72 6e 20 62 61 73 65 2e 43 61 74 61 6c  eturn base.Catal
18e0: 6f 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  og;.      }.    
18f0: 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    set.      {.  
1900: 20 20 20 20 20 20 53 65 74 43 61 74 61 6c 6f 67        SetCatalog
1910: 28 76 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d  (value);.      }
1920: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 44 69 73  .    }..    [Dis
1930: 70 6c 61 79 4e 61 6d 65 28 22 42 61 73 65 20 54  playName("Base T
1940: 61 62 6c 65 22 29 5d 0a 20 20 20 20 5b 45 64 69  able")].    [Edi
1950: 74 6f 72 28 74 79 70 65 6f 66 28 54 61 62 6c 65  tor(typeof(Table
1960: 73 54 79 70 65 45 64 69 74 6f 72 29 2c 20 74 79  sTypeEditor), ty
1970: 70 65 6f 66 28 55 49 54 79 70 65 45 64 69 74 6f  peof(UITypeEdito
1980: 72 29 29 5d 0a 20 20 20 20 5b 44 65 73 63 72 69  r))].    [Descri
1990: 70 74 69 6f 6e 28 22 54 68 65 20 74 61 62 6c 65  ption("The table
19a0: 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 66 6f   to which the fo
19b0: 72 65 69 67 6e 20 6b 65 79 20 72 65 66 65 72 73  reign key refers
19c0: 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  .")].    public 
19d0: 6e 65 77 20 73 74 72 69 6e 67 20 54 61 62 6c 65  new string Table
19e0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
19f0: 20 7b 20 72 65 74 75 72 6e 20 62 61 73 65 2e 54   { return base.T
1a00: 61 62 6c 65 3b 20 7d 0a 20 20 20 20 20 20 73 65  able; }.      se
1a10: 74 20 7b 20 53 65 74 54 61 62 6c 65 28 76 61 6c  t { SetTable(val
1a20: 75 65 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  ue); }.    }..  
1a30: 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66    [Editor(typeof
1a40: 28 43 6f 6c 75 6d 6e 73 54 79 70 65 45 64 69 74  (ColumnsTypeEdit
1a50: 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49 54 79  or), typeof(UITy
1a60: 70 65 45 64 69 74 6f 72 29 29 5d 0a 20 20 20 20  peEditor))].    
1a70: 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68  [Description("Th
1a80: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 77 68 69 63  e column to whic
1a90: 68 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  h the foreign ke
1aa0: 79 20 72 65 66 65 72 73 2e 22 29 5d 0a 20 20 20  y refers.")].   
1ab0: 20 70 75 62 6c 69 63 20 6e 65 77 20 73 74 72 69   public new stri
1ac0: 6e 67 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 7b 0a  ng Column.    {.
1ad0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1ae0: 72 6e 20 62 61 73 65 2e 43 6f 6c 75 6d 6e 3b 20  rn base.Column; 
1af0: 7d 0a 20 20 20 20 20 20 73 65 74 20 7b 20 53 65  }.      set { Se
1b00: 74 43 6f 6c 75 6d 6e 28 76 61 6c 75 65 29 3b 20  tColumn(value); 
1b10: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 5b  }.    }.  }..  [
1b20: 44 65 66 61 75 6c 74 50 72 6f 70 65 72 74 79 28  DefaultProperty(
1b30: 22 46 72 6f 6d 22 29 5d 0a 20 20 69 6e 74 65 72  "From")].  inter
1b40: 6e 61 6c 20 63 6c 61 73 73 20 46 6f 72 65 69 67  nal class Foreig
1b50: 6e 4b 65 79 20 3a 20 49 48 61 76 65 43 6f 6e 6e  nKey : IHaveConn
1b60: 65 63 74 69 6f 6e 2c 20 49 43 6c 6f 6e 65 61 62  ection, ICloneab
1b70: 6c 65 0a 20 20 7b 0a 20 20 20 20 69 6e 74 65 72  le.  {.    inter
1b80: 6e 61 6c 20 54 61 62 6c 65 20 5f 74 61 62 6c 65  nal Table _table
1b90: 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 46  ;.    internal F
1ba0: 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74 65  oreignKeyFromIte
1bb0: 6d 20 5f 66 72 6f 6d 3b 0a 20 20 20 20 69 6e 74  m _from;.    int
1bc0: 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65 79  ernal ForeignKey
1bd0: 54 6f 49 74 65 6d 20 5f 74 6f 3b 0a 20 20 20 20  ToItem _to;.    
1be0: 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e 67 20  internal string 
1bf0: 5f 6e 61 6d 65 3b 0a 20 20 20 20 70 72 69 76 61  _name;.    priva
1c00: 74 65 20 62 6f 6f 6c 20 5f 64 69 72 74 79 20 3d  te bool _dirty =
1c10: 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 70 72 69   false;..    pri
1c20: 76 61 74 65 20 46 6f 72 65 69 67 6e 4b 65 79 28  vate ForeignKey(
1c30: 46 6f 72 65 69 67 6e 4b 65 79 20 73 6f 75 72 63  ForeignKey sourc
1c40: 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  e).    {.      _
1c50: 74 61 62 6c 65 20 3d 20 73 6f 75 72 63 65 2e 5f  table = source._
1c60: 74 61 62 6c 65 3b 0a 20 20 20 20 20 20 5f 66 72  table;.      _fr
1c70: 6f 6d 20 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e  om = new Foreign
1c80: 4b 65 79 46 72 6f 6d 49 74 65 6d 28 74 68 69 73  KeyFromItem(this
1c90: 2c 20 73 6f 75 72 63 65 2e 5f 66 72 6f 6d 2e 43  , source._from.C
1ca0: 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 5f 74  olumn);.      _t
1cb0: 6f 20 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b  o = new ForeignK
1cc0: 65 79 54 6f 49 74 65 6d 28 74 68 69 73 2c 20 73  eyToItem(this, s
1cd0: 6f 75 72 63 65 2e 5f 74 6f 2e 43 61 74 61 6c 6f  ource._to.Catalo
1ce0: 67 2c 20 73 6f 75 72 63 65 2e 5f 74 6f 2e 54 61  g, source._to.Ta
1cf0: 62 6c 65 2c 20 73 6f 75 72 63 65 2e 5f 74 6f 2e  ble, source._to.
1d00: 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 5f  Column);.      _
1d10: 6e 61 6d 65 20 3d 20 73 6f 75 72 63 65 2e 5f 6e  name = source._n
1d20: 61 6d 65 3b 0a 20 20 20 20 20 20 5f 64 69 72 74  ame;.      _dirt
1d30: 79 20 3d 20 73 6f 75 72 63 65 2e 5f 64 69 72 74  y = source._dirt
1d40: 79 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  y;.    }..    in
1d50: 74 65 72 6e 61 6c 20 76 6f 69 64 20 4d 61 6b 65  ternal void Make
1d60: 44 69 72 74 79 28 29 0a 20 20 20 20 7b 0a 20 20  Dirty().    {.  
1d70: 20 20 20 20 5f 64 69 72 74 79 20 3d 20 74 72 75      _dirty = tru
1d80: 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42  e;.    }..    [B
1d90: 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d  rowsable(false)]
1da0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f  .    internal bo
1db0: 6f 6c 20 49 73 44 69 72 74 79 0a 20 20 20 20 7b  ol IsDirty.    {
1dc0: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
1dd0: 75 72 6e 20 5f 64 69 72 74 79 3b 20 7d 0a 20 20  urn _dirty; }.  
1de0: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61    }..    interna
1df0: 6c 20 76 6f 69 64 20 43 6c 65 61 72 44 69 72 74  l void ClearDirt
1e00: 79 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  y().    {.      
1e10: 5f 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0a  _dirty = false;.
1e20: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72      }..    inter
1e30: 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65 79 28 44  nal ForeignKey(D
1e40: 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c  bConnection cnn,
1e50: 20 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 44 61   Table table, Da
1e60: 74 61 52 6f 77 20 72 6f 77 29 0a 20 20 20 20 7b  taRow row).    {
1e70: 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20 3d 20  .      _table = 
1e80: 74 61 62 6c 65 3b 0a 20 20 20 20 20 20 69 66 20  table;.      if 
1e90: 28 72 6f 77 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  (row != null).  
1ea0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f 66      {.        _f
1eb0: 72 6f 6d 20 3d 20 6e 65 77 20 46 6f 72 65 69 67  rom = new Foreig
1ec0: 6e 4b 65 79 46 72 6f 6d 49 74 65 6d 28 74 68 69  nKeyFromItem(thi
1ed0: 73 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 46 52 4f  s, row["FKEY_FRO
1ee0: 4d 5f 43 4f 4c 55 4d 4e 22 5d 2e 54 6f 53 74 72  M_COLUMN"].ToStr
1ef0: 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ing());.        
1f00: 5f 74 6f 20 3d 20 6e 65 77 20 46 6f 72 65 69 67  _to = new Foreig
1f10: 6e 4b 65 79 54 6f 49 74 65 6d 28 74 68 69 73 2c  nKeyToItem(this,
1f20: 20 72 6f 77 5b 22 46 4b 45 59 5f 54 4f 5f 43 41   row["FKEY_TO_CA
1f30: 54 41 4c 4f 47 22 5d 2e 54 6f 53 74 72 69 6e 67  TALOG"].ToString
1f40: 28 29 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 54 4f  (), row["FKEY_TO
1f50: 5f 54 41 42 4c 45 22 5d 2e 54 6f 53 74 72 69 6e  _TABLE"].ToStrin
1f60: 67 28 29 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 54  g(), row["FKEY_T
1f70: 4f 5f 43 4f 4c 55 4d 4e 22 5d 2e 54 6f 53 74 72  O_COLUMN"].ToStr
1f80: 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ing());.        
1f90: 5f 6e 61 6d 65 20 3d 20 72 6f 77 5b 22 43 4f 4e  _name = row["CON
1fa0: 53 54 52 41 49 4e 54 5f 4e 41 4d 45 22 5d 2e 54  STRAINT_NAME"].T
1fb0: 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20  oString();.     
1fc0: 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20   }.      else.  
1fd0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f 6e      {.        _n
1fe0: 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20  ame = null;.    
1ff0: 20 20 20 20 5f 66 72 6f 6d 20 3d 20 6e 65 77 20      _from = new 
2000: 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74  ForeignKeyFromIt
2010: 65 6d 28 74 68 69 73 2c 20 22 22 29 3b 0a 20 20  em(this, "");.  
2020: 20 20 20 20 20 20 5f 74 6f 20 3d 20 6e 65 77 20        _to = new 
2030: 46 6f 72 65 69 67 6e 4b 65 79 54 6f 49 74 65 6d  ForeignKeyToItem
2040: 28 74 68 69 73 2c 20 5f 74 61 62 6c 65 2e 43 61  (this, _table.Ca
2050: 74 61 6c 6f 67 2c 20 22 22 2c 20 22 22 29 3b 0a  talog, "", "");.
2060: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
2070: 20 20 20 2f 2f 69 6e 74 65 72 6e 61 6c 20 76 6f     //internal vo
2080: 69 64 20 57 72 69 74 65 53 71 6c 28 53 74 72 69  id WriteSql(Stri
2090: 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
20a0: 72 29 0a 20 20 20 20 2f 2f 7b 0a 20 20 20 20 2f  r).    //{.    /
20b0: 2f 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73  /  if (String.Is
20c0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f 66 72 6f  NullOrEmpty(_fro
20d0: 6d 2e 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c  m.Column) == fal
20e0: 73 65 20 26 26 20 53 74 72 69 6e 67 2e 49 73 4e  se && String.IsN
20f0: 75 6c 6c 4f 72 45 6d 70 74 79 28 5f 74 6f 2e 43  ullOrEmpty(_to.C
2100: 61 74 61 6c 6f 67 29 20 3d 3d 20 66 61 6c 73 65  atalog) == false
2110: 20 26 26 0a 20 20 20 20 2f 2f 20 20 20 20 53 74   &&.    //    St
2120: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2130: 74 79 28 5f 74 6f 2e 54 61 62 6c 65 29 20 3d 3d  ty(_to.Table) ==
2140: 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67   false && String
2150: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f  .IsNullOrEmpty(_
2160: 74 6f 2e 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61  to.Column) == fa
2170: 6c 73 65 29 0a 20 20 20 20 2f 2f 20 20 7b 0a 20  lse).    //  {. 
2180: 20 20 20 2f 2f 20 20 20 20 62 75 69 6c 64 65 72     //    builder
2190: 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 22 43  .AppendFormat("C
21a0: 4f 4e 53 54 52 41 49 4e 54 20 5b 7b 30 7d 5d 20  ONSTRAINT [{0}] 
21b0: 46 4f 52 45 49 47 4e 20 4b 45 59 20 28 5b 7b 31  FOREIGN KEY ([{1
21c0: 7d 5d 29 20 52 45 46 45 52 45 4e 43 45 53 20 5b  }]) REFERENCES [
21d0: 7b 33 7d 5d 20 28 5b 7b 34 7d 5d 29 22 2c 20 4e  {3}] ([{4}])", N
21e0: 61 6d 65 2c 20 5f 66 72 6f 6d 2e 43 6f 6c 75 6d  ame, _from.Colum
21f0: 6e 2c 20 5f 74 6f 2e 43 61 74 61 6c 6f 67 2c 20  n, _to.Catalog, 
2200: 5f 74 6f 2e 54 61 62 6c 65 2c 20 5f 74 6f 2e 43  _to.Table, _to.C
2210: 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 2f 2f 20 20  olumn);.    //  
2220: 7d 0a 20 20 20 20 2f 2f 7d 0a 0a 20 20 20 20 5b  }.    //}..    [
2230: 50 61 72 65 6e 74 68 65 73 69 7a 65 50 72 6f 70  ParenthesizeProp
2240: 65 72 74 79 4e 61 6d 65 28 74 72 75 65 29 5d 0a  ertyName(true)].
2250: 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 49      [Category("I
2260: 64 65 6e 74 69 74 79 22 29 5d 0a 20 20 20 20 5b  dentity")].    [
2270: 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65  Description("The
2280: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 6f 72   name of the for
2290: 65 69 67 6e 20 6b 65 79 2e 22 29 5d 0a 20 20 20  eign key.")].   
22a0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e   public string N
22b0: 61 6d 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ame.    {.      
22c0: 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  get.      {.    
22d0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
22e0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f 6e 61  sNullOrEmpty(_na
22f0: 6d 65 29 20 3d 3d 20 66 61 6c 73 65 29 20 72 65  me) == false) re
2300: 74 75 72 6e 20 5f 6e 61 6d 65 3b 0a 0a 20 20 20  turn _name;..   
2310: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
2320: 6e 67 2e 46 6f 72 6d 61 74 28 22 46 4b 5f 7b 30  ng.Format("FK_{0
2330: 7d 5f 7b 31 7d 5f 7b 32 7d 5f 7b 33 7d 22 2c 20  }_{1}_{2}_{3}", 
2340: 5f 66 72 6f 6d 2e 54 61 62 6c 65 2c 20 5f 66 72  _from.Table, _fr
2350: 6f 6d 2e 43 6f 6c 75 6d 6e 2c 20 5f 74 6f 2e 54  om.Column, _to.T
2360: 61 62 6c 65 2c 20 5f 74 6f 2e 43 6f 6c 75 6d 6e  able, _to.Column
2370: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2380: 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20   set.      {.   
2390: 20 20 20 20 20 69 66 20 28 5f 6e 61 6d 65 20 21       if (_name !
23a0: 3d 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20  = value).       
23b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 6e 61   {.          _na
23c0: 6d 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20  me = value;.    
23d0: 20 20 20 20 20 20 4d 61 6b 65 44 69 72 74 79 28        MakeDirty(
23e0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
23f0: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
2400: 23 72 65 67 69 6f 6e 20 49 48 61 76 65 43 6f 6e  #region IHaveCon
2410: 6e 65 63 74 69 6f 6e 20 4d 65 6d 62 65 72 73 0a  nection Members.
2420: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
2430: 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75 62 6c  false)].    publ
2440: 69 63 20 56 69 65 77 54 61 62 6c 65 42 61 73 65  ic ViewTableBase
2450: 20 44 65 73 69 67 6e 54 61 62 6c 65 0a 20 20 20   DesignTable.   
2460: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72   {.      get { r
2470: 65 74 75 72 6e 20 5f 74 61 62 6c 65 3b 20 7d 0a  eturn _table; }.
2480: 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69      }..    publi
2490: 63 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 47  c DbConnection G
24a0: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 0a 20  etConnection(). 
24b0: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
24c0: 6e 20 28 28 49 48 61 76 65 43 6f 6e 6e 65 63 74  n ((IHaveConnect
24d0: 69 6f 6e 29 5f 74 61 62 6c 65 29 2e 47 65 74 43  ion)_table).GetC
24e0: 6f 6e 6e 65 63 74 69 6f 6e 28 29 3b 0a 20 20 20  onnection();.   
24f0: 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
2500: 6f 6e 0a 0a 20 20 20 20 5b 44 69 73 70 6c 61 79  on..    [Display
2510: 4e 61 6d 65 28 22 46 72 6f 6d 20 4b 65 79 22 29  Name("From Key")
2520: 5d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28  ].    [Category(
2530: 22 46 72 6f 6d 22 29 5d 0a 20 20 20 20 5b 44 65  "From")].    [De
2540: 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20 73  scription("The s
2550: 6f 75 72 63 65 20 63 6f 6c 75 6d 6e 20 69 6e 20  ource column in 
2560: 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
2570: 65 20 74 68 61 74 20 72 65 66 65 72 73 20 74 6f  e that refers to
2580: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
2590: 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  .")].    public 
25a0: 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74  ForeignKeyFromIt
25b0: 65 6d 20 46 72 6f 6d 0a 20 20 20 20 7b 0a 20 20  em From.    {.  
25c0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
25d0: 20 5f 66 72 6f 6d 3b 20 7d 0a 20 20 20 20 7d 0a   _from; }.    }.
25e0: 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d  .    [DisplayNam
25f0: 65 28 22 54 6f 20 4b 65 79 22 29 5d 0a 20 20 20  e("To Key")].   
2600: 20 5b 43 61 74 65 67 6f 72 79 28 22 54 6f 22 29   [Category("To")
2610: 5d 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69  ].    [Descripti
2620: 6f 6e 28 22 54 68 65 20 74 61 62 6c 65 20 61 6e  on("The table an
2630: 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 77 68 69 63  d column to whic
2640: 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
2650: 66 72 6f 6d 20 63 6f 6c 75 6d 6e 20 69 73 20 72  from column is r
2660: 65 6c 61 74 65 64 2e 22 29 5d 0a 20 20 20 20 70  elated.")].    p
2670: 75 62 6c 69 63 20 46 6f 72 65 69 67 6e 4b 65 79  ublic ForeignKey
2680: 54 6f 49 74 65 6d 20 54 6f 0a 20 20 20 20 7b 0a  ToItem To.    {.
2690: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
26a0: 72 6e 20 5f 74 6f 3b 20 7d 0a 20 20 20 20 7d 0a  rn _to; }.    }.
26b0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 43 6c  .    #region ICl
26c0: 6f 6e 65 61 62 6c 65 20 4d 65 6d 62 65 72 73 0a  oneable Members.
26d0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65  .    public obje
26e0: 63 74 20 43 6c 6f 6e 65 28 29 0a 20 20 20 20 7b  ct Clone().    {
26f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65  .      return ne
2700: 77 20 46 6f 72 65 69 67 6e 4b 65 79 28 74 68 69  w ForeignKey(thi
2710: 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  s);.    }..    #
2720: 65 6e 64 72 65 67 69 6f 6e 0a 20 20 7d 0a 7d     endregion.  }.}