System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c4b39e2f295d68115ca99332fd861c62fb6f5aa4:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.com). * . 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a   risk!. ********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 51 4c  /..namespace SQL
0130: 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 44 65 73  ite.Designer.Des
0140: 69 67 6e 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79  ign.{.  using Sy
0150: 73 74 65 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79  stem;.  using Sy
0160: 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73  stem.Collections
0170: 2e 47 65 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e  .Generic;.  usin
0180: 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74  g System.Collect
0190: 69 6f 6e 73 3b 0a 20 20 75 73 69 6e 67 20 53 79  ions;.  using Sy
01a0: 73 74 65 6d 2e 54 65 78 74 3b 0a 20 20 75 73 69  stem.Text;.  usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e  ng System.Compon
01c0: 65 6e 74 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e  entModel;.  usin
01d0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20  g System.Data;. 
01e0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
01f0: 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69  ta.Common;.  usi
0200: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e  ng System.Compon
0210: 65 6e 74 4d 6f 64 65 6c 2e 44 65 73 69 67 6e 3b  entModel.Design;
0220: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0230: 44 72 61 77 69 6e 67 2e 44 65 73 69 67 6e 3b 0a  Drawing.Design;.
0240: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57    using System.W
0250: 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0a 20 20  indows.Forms;.  
0260: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f  using System.Glo
0270: 62 61 6c 69 7a 61 74 69 6f 6e 3b 0a 0a 20 20 69  balization;..  i
0280: 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 46 6f  nternal class Fo
0290: 72 65 69 67 6e 4b 65 79 45 64 69 74 6f 72 20 3a  reignKeyEditor :
02a0: 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f   CollectionEdito
02b0: 72 0a 20 20 7b 0a 20 20 20 20 54 61 62 6c 65 20  r.  {.    Table 
02c0: 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 6f 6c 6c  _table;.    Coll
02d0: 65 63 74 69 6f 6e 45 64 69 74 6f 72 2e 43 6f 6c  ectionEditor.Col
02e0: 6c 65 63 74 69 6f 6e 46 6f 72 6d 20 5f 66 6f 72  lectionForm _for
02f0: 6d 3b 0a 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20  m;.    object[] 
0300: 5f 69 74 65 6d 73 3b 0a 20 20 20 20 6f 62 6a 65  _items;.    obje
0310: 63 74 5b 5d 20 5f 6f 72 69 67 3b 0a 20 20 20 20  ct[] _orig;.    
0320: 69 6e 74 20 5f 63 6f 75 6e 74 3b 0a 0a 20 20 20  int _count;..   
0330: 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69 67   internal Foreig
0340: 6e 4b 65 79 45 64 69 74 6f 72 28 54 61 62 6c 65  nKeyEditor(Table
0350: 20 70 61 72 65 6e 74 29 0a 20 20 20 20 20 20 3a   parent).      :
0360: 20 62 61 73 65 28 74 79 70 65 6f 66 28 4c 69 73   base(typeof(Lis
0370: 74 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 29 29 0a  t<ForeignKey>)).
0380: 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 74 61 62      {.      _tab
0390: 6c 65 20 3d 20 70 61 72 65 6e 74 3b 0a 20 20 20  le = parent;.   
03a0: 20 20 20 5f 63 6f 75 6e 74 20 3d 20 5f 74 61 62     _count = _tab
03b0: 6c 65 2e 46 6f 72 65 69 67 6e 4b 65 79 73 2e 43  le.ForeignKeys.C
03c0: 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ount;.    }..   
03d0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
03e0: 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64  ide CollectionEd
03f0: 69 74 6f 72 2e 43 6f 6c 6c 65 63 74 69 6f 6e 46  itor.CollectionF
0400: 6f 72 6d 20 43 72 65 61 74 65 43 6f 6c 6c 65 63  orm CreateCollec
0410: 74 69 6f 6e 46 6f 72 6d 28 29 0a 20 20 20 20 7b  tionForm().    {
0420: 0a 20 20 20 20 20 20 5f 66 6f 72 6d 20 3d 20 62  .      _form = b
0430: 61 73 65 2e 43 72 65 61 74 65 43 6f 6c 6c 65 63  ase.CreateCollec
0440: 74 69 6f 6e 46 6f 72 6d 28 29 3b 0a 20 20 20 20  tionForm();.    
0450: 20 20 5f 66 6f 72 6d 2e 54 65 78 74 20 3d 20 22    _form.Text = "
0460: 46 6f 72 65 69 67 6e 20 4b 65 79 20 45 64 69 74  Foreign Key Edit
0470: 6f 72 22 3b 0a 20 20 20 20 20 20 66 6f 72 65 61  or";.      forea
0480: 63 68 20 28 43 6f 6e 74 72 6f 6c 20 63 20 69 6e  ch (Control c in
0490: 20 5f 66 6f 72 6d 2e 43 6f 6e 74 72 6f 6c 73 5b   _form.Controls[
04a0: 30 5d 2e 43 6f 6e 74 72 6f 6c 73 29 0a 20 20 20  0].Controls).   
04b0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 50 72 6f     {.        Pro
04c0: 70 65 72 74 79 47 72 69 64 20 67 72 69 64 20 3d  pertyGrid grid =
04d0: 20 63 20 61 73 20 50 72 6f 70 65 72 74 79 47 72   c as PropertyGr
04e0: 69 64 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  id;.        if (
04f0: 67 72 69 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  grid != null).  
0500: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0510: 20 20 67 72 69 64 2e 48 65 6c 70 56 69 73 69 62    grid.HelpVisib
0520: 6c 65 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20  le = true;.     
0530: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0540: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
0550: 20 20 20 20 5f 66 6f 72 6d 2e 57 69 64 74 68 20      _form.Width 
0560: 3d 20 28 69 6e 74 29 28 5f 66 6f 72 6d 2e 57 69  = (int)(_form.Wi
0570: 64 74 68 20 2a 20 31 2e 32 35 29 3b 0a 20 20 20  dth * 1.25);.   
0580: 20 20 20 5f 66 6f 72 6d 2e 48 65 69 67 68 74 20     _form.Height 
0590: 3d 20 28 69 6e 74 29 28 5f 66 6f 72 6d 2e 48 65  = (int)(_form.He
05a0: 69 67 68 74 20 2a 20 31 2e 32 35 29 3b 0a 0a 20  ight * 1.25);.. 
05b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 6f 72       return _for
05c0: 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  m;.    }..    pr
05d0: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
05e0: 20 6f 62 6a 65 63 74 20 43 72 65 61 74 65 49 6e   object CreateIn
05f0: 73 74 61 6e 63 65 28 54 79 70 65 20 69 74 65 6d  stance(Type item
0600: 54 79 70 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  Type).    {.    
0610: 20 20 69 66 20 28 69 74 65 6d 54 79 70 65 20 3d    if (itemType =
0620: 3d 20 74 79 70 65 6f 66 28 46 6f 72 65 69 67 6e  = typeof(Foreign
0630: 4b 65 79 29 29 0a 20 20 20 20 20 20 7b 0a 20 20  Key)).      {.  
0640: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
0650: 20 46 6f 72 65 69 67 6e 4b 65 79 28 6e 75 6c 6c   ForeignKey(null
0660: 2c 20 5f 74 61 62 6c 65 2c 20 6e 75 6c 6c 29 3b  , _table, null);
0670: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 74  .      }.      t
0680: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70 70  hrow new NotSupp
0690: 6f 72 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  ortedException()
06a0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ;.    }..    pro
06b0: 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20  tected override 
06c0: 6f 62 6a 65 63 74 5b 5d 20 47 65 74 49 74 65 6d  object[] GetItem
06d0: 73 28 6f 62 6a 65 63 74 20 65 64 69 74 56 61 6c  s(object editVal
06e0: 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ue).    {.      
06f0: 69 66 20 28 5f 69 74 65 6d 73 20 3d 3d 20 6e 75  if (_items == nu
0700: 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ll).      {.    
0710: 20 20 20 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e      List<Foreign
0720: 4b 65 79 3e 20 69 74 65 6d 73 20 3d 20 65 64 69  Key> items = edi
0730: 74 56 61 6c 75 65 20 61 73 20 4c 69 73 74 3c 46  tValue as List<F
0740: 6f 72 65 69 67 6e 4b 65 79 3e 3b 0a 20 20 20 20  oreignKey>;.    
0750: 20 20 20 20 5f 69 74 65 6d 73 20 3d 20 6e 65 77      _items = new
0760: 20 6f 62 6a 65 63 74 5b 69 74 65 6d 73 2e 43 6f   object[items.Co
0770: 75 6e 74 5d 3b 0a 20 20 20 20 20 20 20 20 5f 6f  unt];.        _o
0780: 72 69 67 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  rig = new object
0790: 5b 69 74 65 6d 73 2e 43 6f 75 6e 74 5d 3b 0a 20  [items.Count];. 
07a0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
07b0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 69 74 65 6d  n = 0; n < _item
07c0: 73 2e 4c 65 6e 67 74 68 3b 20 6e 2b 2b 29 0a 20  s.Length; n++). 
07d0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
07e0: 20 20 20 5f 69 74 65 6d 73 5b 6e 5d 20 3d 20 28     _items[n] = (
07f0: 28 49 43 6c 6f 6e 65 61 62 6c 65 29 69 74 65 6d  (ICloneable)item
0800: 73 5b 6e 5d 29 2e 43 6c 6f 6e 65 28 29 3b 0a 20  s[n]).Clone();. 
0810: 20 20 20 20 20 20 20 20 20 5f 6f 72 69 67 5b 6e           _orig[n
0820: 5d 20 3d 20 69 74 65 6d 73 5b 6e 5d 3b 0a 20 20  ] = items[n];.  
0830: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
0840: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 69 74        return _it
0850: 65 6d 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ems;.    }..    
0860: 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69  protected overri
0870: 64 65 20 6f 62 6a 65 63 74 20 53 65 74 49 74 65  de object SetIte
0880: 6d 73 28 6f 62 6a 65 63 74 20 65 64 69 74 56 61  ms(object editVa
0890: 6c 75 65 2c 20 6f 62 6a 65 63 74 5b 5d 20 76 61  lue, object[] va
08a0: 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lue).    {.     
08b0: 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61   bool dirty = fa
08c0: 6c 73 65 3b 0a 20 20 20 20 20 20 69 66 20 28 5f  lse;.      if (_
08d0: 66 6f 72 6d 2e 44 69 61 6c 6f 67 52 65 73 75 6c  form.DialogResul
08e0: 74 20 3d 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c  t == DialogResul
08f0: 74 2e 43 61 6e 63 65 6c 29 20 76 61 6c 75 65 20  t.Cancel) value 
0900: 3d 20 5f 6f 72 69 67 3b 0a 0a 20 20 20 20 20 20  = _orig;..      
0910: 69 66 20 28 65 64 69 74 56 61 6c 75 65 20 21 3d  if (editValue !=
0920: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20   null).      {. 
0930: 20 20 20 20 20 20 20 69 66 20 28 21 28 65 64 69         if (!(edi
0940: 74 56 61 6c 75 65 20 69 73 20 49 4c 69 73 74 29  tValue is IList)
0950: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
0960: 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 64 69        return edi
0970: 74 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20  tValue;.        
0980: 7d 0a 20 20 20 20 20 20 20 20 49 4c 69 73 74 20  }.        IList 
0990: 6c 69 73 74 20 3d 20 28 49 4c 69 73 74 29 65 64  list = (IList)ed
09a0: 69 74 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  itValue;.       
09b0: 20 6c 69 73 74 2e 43 6c 65 61 72 28 29 3b 0a 20   list.Clear();. 
09c0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
09d0: 69 20 3d 20 30 3b 20 69 20 3c 20 76 61 6c 75 65  i = 0; i < value
09e0: 2e 4c 65 6e 67 74 68 3b 20 69 2b 2b 29 0a 20 20  .Length; i++).  
09f0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0a00: 20 20 46 6f 72 65 69 67 6e 4b 65 79 20 66 6b 65    ForeignKey fke
0a10: 79 20 3d 20 76 61 6c 75 65 5b 69 5d 20 61 73 20  y = value[i] as 
0a20: 46 6f 72 65 69 67 6e 4b 65 79 3b 0a 0a 20 20 20  ForeignKey;..   
0a30: 20 20 20 20 20 20 20 69 66 20 28 66 6b 65 79 20         if (fkey 
0a40: 21 3d 20 6e 75 6c 6c 20 26 26 20 53 74 72 69 6e  != null && Strin
0a50: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
0a60: 66 6b 65 79 2e 46 72 6f 6d 2e 43 6f 6c 75 6d 6e  fkey.From.Column
0a70: 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  ) == false && St
0a80: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
0a90: 74 79 28 66 6b 65 79 2e 54 6f 2e 43 61 74 61 6c  ty(fkey.To.Catal
0aa0: 6f 67 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 0a  og) == false &&.
0ab0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
0ac0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
0ad0: 28 66 6b 65 79 2e 54 6f 2e 54 61 62 6c 65 29 20  (fkey.To.Table) 
0ae0: 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69  == false && Stri
0af0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
0b00: 28 66 6b 65 79 2e 54 6f 2e 43 6f 6c 75 6d 6e 29  (fkey.To.Column)
0b10: 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20   == false).     
0b20: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0b30: 20 20 20 69 66 20 28 66 6b 65 79 2e 49 73 44 69     if (fkey.IsDi
0b40: 72 74 79 29 20 64 69 72 74 79 20 3d 20 74 72 75  rty) dirty = tru
0b50: 65 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
0b60: 6c 69 73 74 2e 41 64 64 28 76 61 6c 75 65 5b 69  list.Add(value[i
0b70: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ]);.          }.
0b80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0b90: 20 20 69 66 20 28 28 64 69 72 74 79 20 3d 3d 20    if ((dirty == 
0ba0: 74 72 75 65 20 7c 7c 20 6c 69 73 74 2e 43 6f 75  true || list.Cou
0bb0: 6e 74 20 21 3d 20 5f 63 6f 75 6e 74 29 20 26 26  nt != _count) &&
0bc0: 20 5f 66 6f 72 6d 2e 44 69 61 6c 6f 67 52 65 73   _form.DialogRes
0bd0: 75 6c 74 20 3d 3d 20 44 69 61 6c 6f 67 52 65 73  ult == DialogRes
0be0: 75 6c 74 2e 4f 4b 29 0a 20 20 20 20 20 20 20 20  ult.OK).        
0bf0: 5f 74 61 62 6c 65 2e 4d 61 6b 65 44 69 72 74 79  _table.MakeDirty
0c00: 28 29 3b 20 20 20 20 20 20 0a 20 20 20 20 20 20  ();      .      
0c10: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 65  }.      return e
0c20: 64 69 74 56 61 6c 75 65 3b 0a 20 20 20 20 7d 0a  ditValue;.    }.
0c30: 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20    }..  internal 
0c40: 63 6c 61 73 73 20 46 6f 72 65 69 67 6e 4b 65 79  class ForeignKey
0c50: 49 74 65 6d 20 3a 20 49 48 61 76 65 43 6f 6e 6e  Item : IHaveConn
0c60: 65 63 74 69 6f 6e 53 63 6f 70 65 0a 20 20 7b 0a  ectionScope.  {.
0c70: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0c80: 6e 67 20 5f 63 61 74 61 6c 6f 67 3b 0a 20 20 20  ng _catalog;.   
0c90: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
0ca0: 5f 74 61 62 6c 65 3b 0a 20 20 20 20 70 72 69 76  _table;.    priv
0cb0: 61 74 65 20 73 74 72 69 6e 67 20 5f 63 6f 6c 75  ate string _colu
0cc0: 6d 6e 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  mn;.    private 
0cd0: 46 6f 72 65 69 67 6e 4b 65 79 20 5f 66 6b 65 79  ForeignKey _fkey
0ce0: 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
0cf0: 46 6f 72 65 69 67 6e 4b 65 79 49 74 65 6d 28 46  ForeignKeyItem(F
0d00: 6f 72 65 69 67 6e 4b 65 79 20 66 6b 65 79 2c 20  oreignKey fkey, 
0d10: 73 74 72 69 6e 67 20 63 61 74 61 6c 6f 67 2c 20  string catalog, 
0d20: 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
0d30: 72 69 6e 67 20 63 6f 6c 75 6d 6e 29 0a 20 20 20  ring column).   
0d40: 20 7b 0a 20 20 20 20 20 20 5f 63 61 74 61 6c 6f   {.      _catalo
0d50: 67 20 3d 20 63 61 74 61 6c 6f 67 3b 0a 20 20 20  g = catalog;.   
0d60: 20 20 20 5f 74 61 62 6c 65 20 3d 20 74 61 62 6c     _table = tabl
0d70: 65 3b 0a 20 20 20 20 20 20 5f 63 6f 6c 75 6d 6e  e;.      _column
0d80: 20 3d 20 63 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20   = column;.     
0d90: 20 5f 66 6b 65 79 20 3d 20 66 6b 65 79 3b 0a 20   _fkey = fkey;. 
0da0: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
0db0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
0dc0: 20 54 6f 53 74 72 69 6e 67 28 29 0a 20 20 20 20   ToString().    
0dd0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
0de0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
0df0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
0e00: 6e 74 43 75 6c 74 75 72 65 2c 20 22 5b 7b 30 7d  ntCulture, "[{0}
0e10: 5d 2e 5b 7b 31 7d 5d 2e 5b 7b 32 7d 5d 22 2c 20  ].[{1}].[{2}]", 
0e20: 5f 63 61 74 61 6c 6f 67 2c 20 5f 74 61 62 6c 65  _catalog, _table
0e30: 2c 20 5f 63 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20  , _column);.    
0e40: 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  }..    #region I
0e50: 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4d  HaveConnection M
0e60: 65 6d 62 65 72 73 0a 0a 20 20 20 20 5b 42 72 6f  embers..    [Bro
0e70: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20  wsable(false)]. 
0e80: 20 20 20 70 75 62 6c 69 63 20 56 69 65 77 54 61     public ViewTa
0e90: 62 6c 65 42 61 73 65 20 44 65 73 69 67 6e 54 61  bleBase DesignTa
0ea0: 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ble.    {.      
0eb0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66 6b  get { return _fk
0ec0: 65 79 2e 44 65 73 69 67 6e 54 61 62 6c 65 3b 20  ey.DesignTable; 
0ed0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  }.    }..    pub
0ee0: 6c 69 63 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  lic DbConnection
0ef0: 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29   GetConnection()
0f00: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
0f10: 75 72 6e 20 28 28 49 48 61 76 65 43 6f 6e 6e 65  urn ((IHaveConne
0f20: 63 74 69 6f 6e 29 5f 66 6b 65 79 29 2e 47 65 74  ction)_fkey).Get
0f30: 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 3b 0a 20 20  Connection();.  
0f40: 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61    }..    [Browsa
0f50: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
0f60: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 61  public string Ta
0f70: 62 6c 65 53 63 6f 70 65 0a 20 20 20 20 7b 0a 20  bleScope.    {. 
0f80: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
0f90: 6e 20 5f 74 61 62 6c 65 3b 20 7d 0a 20 20 20 20  n _table; }.    
0fa0: 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  }..    [Browsabl
0fb0: 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75  e(false)].    pu
0fc0: 62 6c 69 63 20 73 74 72 69 6e 67 20 43 61 74 61  blic string Cata
0fd0: 6c 6f 67 53 63 6f 70 65 0a 20 20 20 20 7b 0a 20  logScope.    {. 
0fe0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
0ff0: 6e 20 5f 63 61 74 61 6c 6f 67 3b 20 7d 0a 20 20  n _catalog; }.  
1000: 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
1010: 69 6f 6e 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61  ion..    [Browsa
1020: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
1030: 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43  [Editor(typeof(C
1040: 61 74 61 6c 6f 67 54 79 70 65 45 64 69 74 6f 72  atalogTypeEditor
1050: 29 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65  ), typeof(UIType
1060: 45 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 70 75  Editor))].    pu
1070: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
1080: 69 6e 67 20 43 61 74 61 6c 6f 67 0a 20 20 20 20  ing Catalog.    
1090: 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  {.      get { re
10a0: 74 75 72 6e 20 5f 63 61 74 61 6c 6f 67 3b 20 7d  turn _catalog; }
10b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 45 64 69  .    }..    [Edi
10c0: 74 6f 72 28 74 79 70 65 6f 66 28 54 61 62 6c 65  tor(typeof(Table
10d0: 73 54 79 70 65 45 64 69 74 6f 72 29 2c 20 74 79  sTypeEditor), ty
10e0: 70 65 6f 66 28 55 49 54 79 70 65 45 64 69 74 6f  peof(UITypeEdito
10f0: 72 29 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  r))].    public 
1100: 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 54  virtual string T
1110: 61 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20  able.    {.     
1120: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74   get { return _t
1130: 61 62 6c 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20  able; }.    }.. 
1140: 20 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f     [Editor(typeo
1150: 66 28 43 6f 6c 75 6d 6e 73 54 79 70 65 45 64 69  f(ColumnsTypeEdi
1160: 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49 54  tor), typeof(UIT
1170: 79 70 65 45 64 69 74 6f 72 29 29 5d 0a 20 20 20  ypeEditor))].   
1180: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
1190: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20 20  string Column.  
11a0: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
11b0: 72 65 74 75 72 6e 20 5f 63 6f 6c 75 6d 6e 3b 20  return _column; 
11c0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  }.    }..    pro
11d0: 74 65 63 74 65 64 20 76 6f 69 64 20 53 65 74 43  tected void SetC
11e0: 61 74 61 6c 6f 67 28 73 74 72 69 6e 67 20 76 61  atalog(string va
11f0: 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lue).    {.     
1200: 20 69 66 20 28 5f 63 61 74 61 6c 6f 67 20 21 3d   if (_catalog !=
1210: 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 7b 0a   value).      {.
1220: 20 20 20 20 20 20 20 20 5f 63 61 74 61 6c 6f 67          _catalog
1230: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
1240: 20 20 5f 66 6b 65 79 2e 4d 61 6b 65 44 69 72 74    _fkey.MakeDirt
1250: 79 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  y();.      }.   
1260: 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63 74 65   }..    protecte
1270: 64 20 76 6f 69 64 20 53 65 74 54 61 62 6c 65 28  d void SetTable(
1280: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0a 20 20  string value).  
1290: 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 74    {.      if (_t
12a0: 61 62 6c 65 20 21 3d 20 76 61 6c 75 65 29 0a 20  able != value). 
12b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f       {.        _
12c0: 74 61 62 6c 65 20 3d 20 76 61 6c 75 65 3b 0a 20  table = value;. 
12d0: 20 20 20 20 20 20 20 5f 66 6b 65 79 2e 4d 61 6b         _fkey.Mak
12e0: 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20 20 20  eDirty();.      
12f0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  }.    }..    pro
1300: 74 65 63 74 65 64 20 76 6f 69 64 20 53 65 74 43  tected void SetC
1310: 6f 6c 75 6d 6e 28 73 74 72 69 6e 67 20 76 61 6c  olumn(string val
1320: 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ue).    {.      
1330: 69 66 20 28 5f 63 6f 6c 75 6d 6e 20 21 3d 20 76  if (_column != v
1340: 61 6c 75 65 29 0a 20 20 20 20 20 20 7b 0a 20 20  alue).      {.  
1350: 20 20 20 20 20 20 5f 63 6f 6c 75 6d 6e 20 3d 20        _column = 
1360: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 5f  value;.        _
1370: 66 6b 65 79 2e 4d 61 6b 65 44 69 72 74 79 28 29  fkey.MakeDirty()
1380: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1390: 20 20 7d 0a 0a 20 20 5b 54 79 70 65 43 6f 6e 76    }..  [TypeConv
13a0: 65 72 74 65 72 28 74 79 70 65 6f 66 28 45 78 70  erter(typeof(Exp
13b0: 61 6e 64 61 62 6c 65 4f 62 6a 65 63 74 43 6f 6e  andableObjectCon
13c0: 76 65 72 74 65 72 29 29 5d 0a 20 20 69 6e 74 65  verter))].  inte
13d0: 72 6e 61 6c 20 63 6c 61 73 73 20 46 6f 72 65 69  rnal class Forei
13e0: 67 6e 4b 65 79 46 72 6f 6d 49 74 65 6d 20 3a 20  gnKeyFromItem : 
13f0: 46 6f 72 65 69 67 6e 4b 65 79 49 74 65 6d 0a 20  ForeignKeyItem. 
1400: 20 7b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20   {.    internal 
1410: 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74  ForeignKeyFromIt
1420: 65 6d 28 46 6f 72 65 69 67 6e 4b 65 79 20 66 6b  em(ForeignKey fk
1430: 65 79 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  ey, string colum
1440: 6e 29 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28  n).      : base(
1450: 66 6b 65 79 2c 20 66 6b 65 79 2e 5f 74 61 62 6c  fkey, fkey._tabl
1460: 65 2e 43 61 74 61 6c 6f 67 2c 20 66 6b 65 79 2e  e.Catalog, fkey.
1470: 5f 74 61 62 6c 65 2e 4e 61 6d 65 2c 20 63 6f 6c  _table.Name, col
1480: 75 6d 6e 29 0a 20 20 20 20 7b 0a 20 20 20 20 7d  umn).    {.    }
1490: 0a 0a 20 20 20 20 5b 45 64 69 74 6f 72 28 74 79  ..    [Editor(ty
14a0: 70 65 6f 66 28 43 6f 6c 75 6d 6e 73 54 79 70 65  peof(ColumnsType
14b0: 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66 28  Editor), typeof(
14c0: 55 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d 0a  UITypeEditor))].
14d0: 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e      [Description
14e0: 28 22 54 68 65 20 63 6f 6c 75 6d 6e 20 6f 66 20  ("The column of 
14f0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
1500: 65 20 74 68 61 74 20 72 65 66 65 72 73 20 74 6f  e that refers to
1510: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
1520: 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 22 29 5d   relationship")]
1530: 0a 20 20 20 20 70 75 62 6c 69 63 20 6e 65 77 20  .    public new 
1540: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20 20  string Column.  
1550: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
1560: 72 65 74 75 72 6e 20 62 61 73 65 2e 43 6f 6c 75  return base.Colu
1570: 6d 6e 3b 20 7d 0a 20 20 20 20 20 20 73 65 74 20  mn; }.      set 
1580: 7b 20 53 65 74 43 6f 6c 75 6d 6e 28 76 61 6c 75  { SetColumn(valu
1590: 65 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  e); }.    }..   
15a0: 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73   [Browsable(fals
15b0: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  e)].    public o
15c0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
15d0: 61 74 61 6c 6f 67 0a 20 20 20 20 7b 0a 20 20 20  atalog.    {.   
15e0: 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20     get.      {. 
15f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 61         return ba
1600: 73 65 2e 43 61 74 61 6c 6f 67 3b 0a 20 20 20 20  se.Catalog;.    
1610: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b    }.    }..    [
1620: 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29  Browsable(false)
1630: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ].    public ove
1640: 72 72 69 64 65 20 73 74 72 69 6e 67 20 54 61 62  rride string Tab
1650: 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  le.    {.      g
1660: 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  et.      {.     
1670: 20 20 20 72 65 74 75 72 6e 20 62 61 73 65 2e 44     return base.D
1680: 65 73 69 67 6e 54 61 62 6c 65 2e 4e 61 6d 65 3b  esignTable.Name;
1690: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
16a0: 20 7d 0a 0a 20 20 5b 54 79 70 65 43 6f 6e 76 65   }..  [TypeConve
16b0: 72 74 65 72 28 74 79 70 65 6f 66 28 45 78 70 61  rter(typeof(Expa
16c0: 6e 64 61 62 6c 65 4f 62 6a 65 63 74 43 6f 6e 76  ndableObjectConv
16d0: 65 72 74 65 72 29 29 5d 0a 20 20 69 6e 74 65 72  erter))].  inter
16e0: 6e 61 6c 20 63 6c 61 73 73 20 46 6f 72 65 69 67  nal class Foreig
16f0: 6e 4b 65 79 54 6f 49 74 65 6d 20 3a 20 46 6f 72  nKeyToItem : For
1700: 65 69 67 6e 4b 65 79 49 74 65 6d 0a 20 20 7b 0a  eignKeyItem.  {.
1710: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72      internal For
1720: 65 69 67 6e 4b 65 79 54 6f 49 74 65 6d 28 46 6f  eignKeyToItem(Fo
1730: 72 65 69 67 6e 4b 65 79 20 66 6b 65 79 2c 20 73  reignKey fkey, s
1740: 74 72 69 6e 67 20 63 61 74 61 6c 6f 67 2c 20 73  tring catalog, s
1750: 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72  tring table, str
1760: 69 6e 67 20 63 6f 6c 75 6d 6e 29 0a 20 20 20 20  ing column).    
1770: 20 20 3a 20 62 61 73 65 28 66 6b 65 79 2c 20 63    : base(fkey, c
1780: 61 74 61 6c 6f 67 2c 20 74 61 62 6c 65 2c 20 63  atalog, table, c
1790: 6f 6c 75 6d 6e 29 0a 20 20 20 20 7b 0a 20 20 20  olumn).    {.   
17a0: 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62   }..    [Browsab
17b0: 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 5b  le(false)].    [
17c0: 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43 61  Editor(typeof(Ca
17d0: 74 61 6c 6f 67 54 79 70 65 45 64 69 74 6f 72 29  talogTypeEditor)
17e0: 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65 45  , typeof(UITypeE
17f0: 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 5b 44 65  ditor))].    [De
1800: 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20 64  scription("The d
1810: 61 74 61 62 61 73 65 20 63 61 74 61 6c 6f 67 20  atabase catalog 
1820: 28 6d 61 69 6e 2c 20 74 65 6d 70 2c 20 6f 72 20  (main, temp, or 
1830: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61  the name of an a
1840: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1850: 29 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 66  ) to which the f
1860: 6f 72 65 69 67 6e 20 6b 65 79 20 72 65 66 65 72  oreign key refer
1870: 73 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c 69 63  s.")].    public
1880: 20 6e 65 77 20 73 74 72 69 6e 67 20 43 61 74 61   new string Cata
1890: 6c 6f 67 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  log.    {.      
18a0: 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  get.      {.    
18b0: 20 20 20 20 72 65 74 75 72 6e 20 62 61 73 65 2e      return base.
18c0: 43 61 74 61 6c 6f 67 3b 0a 20 20 20 20 20 20 7d  Catalog;.      }
18d0: 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20 20 20  .      set.     
18e0: 20 7b 0a 20 20 20 20 20 20 20 20 53 65 74 43 61   {.        SetCa
18f0: 74 61 6c 6f 67 28 76 61 6c 75 65 29 3b 0a 20 20  talog(value);.  
1900: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
1910: 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 42   [DisplayName("B
1920: 61 73 65 20 54 61 62 6c 65 22 29 5d 0a 20 20 20  ase Table")].   
1930: 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28   [Editor(typeof(
1940: 54 61 62 6c 65 73 54 79 70 65 45 64 69 74 6f 72  TablesTypeEditor
1950: 29 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65  ), typeof(UIType
1960: 45 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 5b 44  Editor))].    [D
1970: 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20  escription("The 
1980: 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
1990: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 72  he foreign key r
19a0: 65 66 65 72 73 2e 22 29 5d 0a 20 20 20 20 70 75  efers.")].    pu
19b0: 62 6c 69 63 20 6e 65 77 20 73 74 72 69 6e 67 20  blic new string 
19c0: 54 61 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20  Table.    {.    
19d0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 62    get { return b
19e0: 61 73 65 2e 54 61 62 6c 65 3b 20 7d 0a 20 20 20  ase.Table; }.   
19f0: 20 20 20 73 65 74 20 7b 20 53 65 74 54 61 62 6c     set { SetTabl
1a00: 65 28 76 61 6c 75 65 29 3b 20 7d 0a 20 20 20 20  e(value); }.    
1a10: 7d 0a 0a 20 20 20 20 5b 45 64 69 74 6f 72 28 74  }..    [Editor(t
1a20: 79 70 65 6f 66 28 43 6f 6c 75 6d 6e 73 54 79 70  ypeof(ColumnsTyp
1a30: 65 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66  eEditor), typeof
1a40: 28 55 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d  (UITypeEditor))]
1a50: 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f  .    [Descriptio
1a60: 6e 28 22 54 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  n("The column to
1a70: 20 77 68 69 63 68 20 74 68 65 20 66 6f 72 65 69   which the forei
1a80: 67 6e 20 6b 65 79 20 72 65 66 65 72 73 2e 22 29  gn key refers.")
1a90: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6e 65 77  ].    public new
1aa0: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 0a 20   string Column. 
1ab0: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
1ac0: 20 72 65 74 75 72 6e 20 62 61 73 65 2e 43 6f 6c   return base.Col
1ad0: 75 6d 6e 3b 20 7d 0a 20 20 20 20 20 20 73 65 74  umn; }.      set
1ae0: 20 7b 20 53 65 74 43 6f 6c 75 6d 6e 28 76 61 6c   { SetColumn(val
1af0: 75 65 29 3b 20 7d 0a 20 20 20 20 7d 0a 20 20 7d  ue); }.    }.  }
1b00: 0a 0a 20 20 5b 44 65 66 61 75 6c 74 50 72 6f 70  ..  [DefaultProp
1b10: 65 72 74 79 28 22 46 72 6f 6d 22 29 5d 0a 20 20  erty("From")].  
1b20: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 46  internal class F
1b30: 6f 72 65 69 67 6e 4b 65 79 20 3a 20 49 48 61 76  oreignKey : IHav
1b40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20 49 43 6c  eConnection, ICl
1b50: 6f 6e 65 61 62 6c 65 0a 20 20 7b 0a 20 20 20 20  oneable.  {.    
1b60: 69 6e 74 65 72 6e 61 6c 20 54 61 62 6c 65 20 5f  internal Table _
1b70: 74 61 62 6c 65 3b 0a 20 20 20 20 69 6e 74 65 72  table;.    inter
1b80: 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65 79 46 72  nal ForeignKeyFr
1b90: 6f 6d 49 74 65 6d 20 5f 66 72 6f 6d 3b 0a 20 20  omItem _from;.  
1ba0: 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69    internal Forei
1bb0: 67 6e 4b 65 79 54 6f 49 74 65 6d 20 5f 74 6f 3b  gnKeyToItem _to;
1bc0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
1bd0: 72 69 6e 67 20 5f 6e 61 6d 65 3b 0a 20 20 20 20  ring _name;.    
1be0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f 64 69  private bool _di
1bf0: 72 74 79 3b 0a 0a 20 20 20 20 70 72 69 76 61 74  rty;..    privat
1c00: 65 20 46 6f 72 65 69 67 6e 4b 65 79 28 46 6f 72  e ForeignKey(For
1c10: 65 69 67 6e 4b 65 79 20 73 6f 75 72 63 65 29 0a  eignKey source).
1c20: 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 74 61 62      {.      _tab
1c30: 6c 65 20 3d 20 73 6f 75 72 63 65 2e 5f 74 61 62  le = source._tab
1c40: 6c 65 3b 0a 20 20 20 20 20 20 5f 66 72 6f 6d 20  le;.      _from 
1c50: 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65 79  = new ForeignKey
1c60: 46 72 6f 6d 49 74 65 6d 28 74 68 69 73 2c 20 73  FromItem(this, s
1c70: 6f 75 72 63 65 2e 5f 66 72 6f 6d 2e 43 6f 6c 75  ource._from.Colu
1c80: 6d 6e 29 3b 0a 20 20 20 20 20 20 5f 74 6f 20 3d  mn);.      _to =
1c90: 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 54   new ForeignKeyT
1ca0: 6f 49 74 65 6d 28 74 68 69 73 2c 20 73 6f 75 72  oItem(this, sour
1cb0: 63 65 2e 5f 74 6f 2e 43 61 74 61 6c 6f 67 2c 20  ce._to.Catalog, 
1cc0: 73 6f 75 72 63 65 2e 5f 74 6f 2e 54 61 62 6c 65  source._to.Table
1cd0: 2c 20 73 6f 75 72 63 65 2e 5f 74 6f 2e 43 6f 6c  , source._to.Col
1ce0: 75 6d 6e 29 3b 0a 20 20 20 20 20 20 5f 6e 61 6d  umn);.      _nam
1cf0: 65 20 3d 20 73 6f 75 72 63 65 2e 5f 6e 61 6d 65  e = source._name
1d00: 3b 0a 20 20 20 20 20 20 5f 64 69 72 74 79 20 3d  ;.      _dirty =
1d10: 20 73 6f 75 72 63 65 2e 5f 64 69 72 74 79 3b 0a   source._dirty;.
1d20: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72      }..    inter
1d30: 6e 61 6c 20 76 6f 69 64 20 4d 61 6b 65 44 69 72  nal void MakeDir
1d40: 74 79 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ty().    {.     
1d50: 20 5f 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0a   _dirty = true;.
1d60: 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77      }..    [Brow
1d70: 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20  sable(false)].  
1d80: 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20    internal bool 
1d90: 49 73 44 69 72 74 79 0a 20 20 20 20 7b 0a 20 20  IsDirty.    {.  
1da0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1db0: 20 5f 64 69 72 74 79 3b 20 7d 0a 20 20 20 20 7d   _dirty; }.    }
1dc0: 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76  ..    internal v
1dd0: 6f 69 64 20 43 6c 65 61 72 44 69 72 74 79 28 29  oid ClearDirty()
1de0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 64 69  .    {.      _di
1df0: 72 74 79 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  rty = false;.   
1e00: 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c   }..    internal
1e10: 20 46 6f 72 65 69 67 6e 4b 65 79 28 44 62 43 6f   ForeignKey(DbCo
1e20: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 54 61  nnection cnn, Ta
1e30: 62 6c 65 20 74 61 62 6c 65 2c 20 44 61 74 61 52  ble table, DataR
1e40: 6f 77 20 72 6f 77 29 0a 20 20 20 20 7b 0a 20 20  ow row).    {.  
1e50: 20 20 20 20 5f 74 61 62 6c 65 20 3d 20 74 61 62      _table = tab
1e60: 6c 65 3b 0a 20 20 20 20 20 20 69 66 20 28 72 6f  le;.      if (ro
1e70: 77 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  w != null).     
1e80: 20 7b 0a 20 20 20 20 20 20 20 20 5f 66 72 6f 6d   {.        _from
1e90: 20 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65   = new ForeignKe
1ea0: 79 46 72 6f 6d 49 74 65 6d 28 74 68 69 73 2c 20  yFromItem(this, 
1eb0: 72 6f 77 5b 22 46 4b 45 59 5f 46 52 4f 4d 5f 43  row["FKEY_FROM_C
1ec0: 4f 4c 55 4d 4e 22 5d 2e 54 6f 53 74 72 69 6e 67  OLUMN"].ToString
1ed0: 28 29 29 3b 0a 20 20 20 20 20 20 20 20 5f 74 6f  ());.        _to
1ee0: 20 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65   = new ForeignKe
1ef0: 79 54 6f 49 74 65 6d 28 74 68 69 73 2c 20 72 6f  yToItem(this, ro
1f00: 77 5b 22 46 4b 45 59 5f 54 4f 5f 43 41 54 41 4c  w["FKEY_TO_CATAL
1f10: 4f 47 22 5d 2e 54 6f 53 74 72 69 6e 67 28 29 2c  OG"].ToString(),
1f20: 20 72 6f 77 5b 22 46 4b 45 59 5f 54 4f 5f 54 41   row["FKEY_TO_TA
1f30: 42 4c 45 22 5d 2e 54 6f 53 74 72 69 6e 67 28 29  BLE"].ToString()
1f40: 2c 20 72 6f 77 5b 22 46 4b 45 59 5f 54 4f 5f 43  , row["FKEY_TO_C
1f50: 4f 4c 55 4d 4e 22 5d 2e 54 6f 53 74 72 69 6e 67  OLUMN"].ToString
1f60: 28 29 29 3b 0a 20 20 20 20 20 20 20 20 5f 6e 61  ());.        _na
1f70: 6d 65 20 3d 20 72 6f 77 5b 22 43 4f 4e 53 54 52  me = row["CONSTR
1f80: 41 49 4e 54 5f 4e 41 4d 45 22 5d 2e 54 6f 53 74  AINT_NAME"].ToSt
1f90: 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 7d 0a  ring();.      }.
1fa0: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
1fb0: 20 7b 0a 20 20 20 20 20 20 20 20 5f 66 72 6f 6d   {.        _from
1fc0: 20 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65   = new ForeignKe
1fd0: 79 46 72 6f 6d 49 74 65 6d 28 74 68 69 73 2c 20  yFromItem(this, 
1fe0: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 5f 74 6f  "");.        _to
1ff0: 20 3d 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65   = new ForeignKe
2000: 79 54 6f 49 74 65 6d 28 74 68 69 73 2c 20 5f 74  yToItem(this, _t
2010: 61 62 6c 65 2e 43 61 74 61 6c 6f 67 2c 20 22 22  able.Catalog, ""
2020: 2c 20 22 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  , "");.      }. 
2030: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 69 6e 74 65     }..    //inte
2040: 72 6e 61 6c 20 76 6f 69 64 20 57 72 69 74 65 53  rnal void WriteS
2050: 71 6c 28 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ql(StringBuilder
2060: 20 62 75 69 6c 64 65 72 29 0a 20 20 20 20 2f 2f   builder).    //
2070: 7b 0a 20 20 20 20 2f 2f 20 20 69 66 20 28 53 74  {.    //  if (St
2080: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2090: 74 79 28 5f 66 72 6f 6d 2e 43 6f 6c 75 6d 6e 29  ty(_from.Column)
20a0: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
20b0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
20c0: 79 28 5f 74 6f 2e 43 61 74 61 6c 6f 67 29 20 3d  y(_to.Catalog) =
20d0: 3d 20 66 61 6c 73 65 20 26 26 0a 20 20 20 20 2f  = false &&.    /
20e0: 2f 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e 75  /    String.IsNu
20f0: 6c 6c 4f 72 45 6d 70 74 79 28 5f 74 6f 2e 54 61  llOrEmpty(_to.Ta
2100: 62 6c 65 29 20 3d 3d 20 66 61 6c 73 65 20 26 26  ble) == false &&
2110: 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
2120: 45 6d 70 74 79 28 5f 74 6f 2e 43 6f 6c 75 6d 6e  Empty(_to.Column
2130: 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20  ) == false).    
2140: 2f 2f 20 20 7b 0a 20 20 20 20 2f 2f 20 20 20 20  //  {.    //    
2150: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f  builder.AppendFo
2160: 72 6d 61 74 28 22 43 4f 4e 53 54 52 41 49 4e 54  rmat("CONSTRAINT
2170: 20 5b 7b 30 7d 5d 20 46 4f 52 45 49 47 4e 20 4b   [{0}] FOREIGN K
2180: 45 59 20 28 5b 7b 31 7d 5d 29 20 52 45 46 45 52  EY ([{1}]) REFER
2190: 45 4e 43 45 53 20 5b 7b 33 7d 5d 20 28 5b 7b 34  ENCES [{3}] ([{4
21a0: 7d 5d 29 22 2c 20 4e 61 6d 65 2c 20 5f 66 72 6f  }])", Name, _fro
21b0: 6d 2e 43 6f 6c 75 6d 6e 2c 20 5f 74 6f 2e 43 61  m.Column, _to.Ca
21c0: 74 61 6c 6f 67 2c 20 5f 74 6f 2e 54 61 62 6c 65  talog, _to.Table
21d0: 2c 20 5f 74 6f 2e 43 6f 6c 75 6d 6e 29 3b 0a 20  , _to.Column);. 
21e0: 20 20 20 2f 2f 20 20 7d 0a 20 20 20 20 2f 2f 7d     //  }.    //}
21f0: 0a 0a 20 20 20 20 5b 50 61 72 65 6e 74 68 65 73  ..    [Parenthes
2200: 69 7a 65 50 72 6f 70 65 72 74 79 4e 61 6d 65 28  izePropertyName(
2210: 74 72 75 65 29 5d 0a 20 20 20 20 5b 43 61 74 65  true)].    [Cate
2220: 67 6f 72 79 28 22 49 64 65 6e 74 69 74 79 22 29  gory("Identity")
2230: 5d 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69  ].    [Descripti
2240: 6f 6e 28 22 54 68 65 20 6e 61 6d 65 20 6f 66 20  on("The name of 
2250: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  the foreign key.
2260: 22 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  ")].    public s
2270: 74 72 69 6e 67 20 4e 61 6d 65 0a 20 20 20 20 7b  tring Name.    {
2280: 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20  .      get.     
2290: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 53   {.        if (S
22a0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
22b0: 70 74 79 28 5f 6e 61 6d 65 29 20 3d 3d 20 66 61  pty(_name) == fa
22c0: 6c 73 65 29 20 72 65 74 75 72 6e 20 5f 6e 61 6d  lse) return _nam
22d0: 65 3b 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75  e;..        retu
22e0: 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
22f0: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
2300: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22  ariantCulture, "
2310: 46 4b 5f 7b 30 7d 5f 7b 31 7d 5f 7b 32 7d 5f 7b  FK_{0}_{1}_{2}_{
2320: 33 7d 22 2c 20 5f 66 72 6f 6d 2e 54 61 62 6c 65  3}", _from.Table
2330: 2c 20 5f 66 72 6f 6d 2e 43 6f 6c 75 6d 6e 2c 20  , _from.Column, 
2340: 5f 74 6f 2e 54 61 62 6c 65 2c 20 5f 74 6f 2e 43  _to.Table, _to.C
2350: 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 7d 0a  olumn);.      }.
2360: 20 20 20 20 20 20 73 65 74 0a 20 20 20 20 20 20        set.      
2370: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6e  {.        if (_n
2380: 61 6d 65 20 21 3d 20 76 61 6c 75 65 29 0a 20 20  ame != value).  
2390: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
23a0: 20 20 5f 6e 61 6d 65 20 3d 20 76 61 6c 75 65 3b    _name = value;
23b0: 0a 20 20 20 20 20 20 20 20 20 20 4d 61 6b 65 44  .          MakeD
23c0: 69 72 74 79 28 29 3b 0a 20 20 20 20 20 20 20 20  irty();.        
23d0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
23e0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 48 61  .    #region IHa
23f0: 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4d 65 6d  veConnection Mem
2400: 62 65 72 73 0a 0a 20 20 20 20 5b 42 72 6f 77 73  bers..    [Brows
2410: 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20  able(false)].   
2420: 20 70 75 62 6c 69 63 20 56 69 65 77 54 61 62 6c   public ViewTabl
2430: 65 42 61 73 65 20 44 65 73 69 67 6e 54 61 62 6c  eBase DesignTabl
2440: 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  e.    {.      ge
2450: 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 61 62 6c  t { return _tabl
2460: 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  e; }.    }..    
2470: 70 75 62 6c 69 63 20 44 62 43 6f 6e 6e 65 63 74  public DbConnect
2480: 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f  ion GetConnectio
2490: 6e 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  n().    {.      
24a0: 72 65 74 75 72 6e 20 28 28 49 48 61 76 65 43 6f  return ((IHaveCo
24b0: 6e 6e 65 63 74 69 6f 6e 29 5f 74 61 62 6c 65 29  nnection)_table)
24c0: 2e 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29  .GetConnection()
24d0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e  ;.    }..    #en
24e0: 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 5b 44 69  dregion..    [Di
24f0: 73 70 6c 61 79 4e 61 6d 65 28 22 46 72 6f 6d 20  splayName("From 
2500: 4b 65 79 22 29 5d 0a 20 20 20 20 5b 43 61 74 65  Key")].    [Cate
2510: 67 6f 72 79 28 22 46 72 6f 6d 22 29 5d 0a 20 20  gory("From")].  
2520: 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22    [Description("
2530: 54 68 65 20 73 6f 75 72 63 65 20 63 6f 6c 75 6d  The source colum
2540: 6e 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  n in the current
2550: 20 74 61 62 6c 65 20 74 68 61 74 20 72 65 66 65   table that refe
2560: 72 73 20 74 6f 20 74 68 65 20 66 6f 72 65 69 67  rs to the foreig
2570: 6e 20 6b 65 79 2e 22 29 5d 0a 20 20 20 20 70 75  n key.")].    pu
2580: 62 6c 69 63 20 46 6f 72 65 69 67 6e 4b 65 79 46  blic ForeignKeyF
2590: 72 6f 6d 49 74 65 6d 20 46 72 6f 6d 0a 20 20 20  romItem From.   
25a0: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72   {.      get { r
25b0: 65 74 75 72 6e 20 5f 66 72 6f 6d 3b 20 7d 0a 20  eturn _from; }. 
25c0: 20 20 20 7d 0a 0a 20 20 20 20 5b 44 69 73 70 6c     }..    [Displ
25d0: 61 79 4e 61 6d 65 28 22 54 6f 20 4b 65 79 22 29  ayName("To Key")
25e0: 5d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28  ].    [Category(
25f0: 22 54 6f 22 29 5d 0a 20 20 20 20 5b 44 65 73 63  "To")].    [Desc
2600: 72 69 70 74 69 6f 6e 28 22 54 68 65 20 74 61 62  ription("The tab
2610: 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  le and column to
2620: 20 77 68 69 63 68 20 74 68 65 20 73 70 65 63 69   which the speci
2630: 66 69 65 64 20 66 72 6f 6d 20 63 6f 6c 75 6d 6e  fied from column
2640: 20 69 73 20 72 65 6c 61 74 65 64 2e 22 29 5d 0a   is related.")].
2650: 20 20 20 20 70 75 62 6c 69 63 20 46 6f 72 65 69      public Forei
2660: 67 6e 4b 65 79 54 6f 49 74 65 6d 20 54 6f 0a 20  gnKeyToItem To. 
2670: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
2680: 20 72 65 74 75 72 6e 20 5f 74 6f 3b 20 7d 0a 20   return _to; }. 
2690: 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f     }..    #regio
26a0: 6e 20 49 43 6c 6f 6e 65 61 62 6c 65 20 4d 65 6d  n ICloneable Mem
26b0: 62 65 72 73 0a 0a 20 20 20 20 70 75 62 6c 69 63  bers..    public
26c0: 20 6f 62 6a 65 63 74 20 43 6c 6f 6e 65 28 29 0a   object Clone().
26d0: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
26e0: 72 6e 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65  rn new ForeignKe
26f0: 79 28 74 68 69 73 29 3b 0a 20 20 20 20 7d 0a 0a  y(this);.    }..
2700: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 20      #endregion. 
2710: 20 7d 0a 7d                                       }.}