System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 2b68d783f098d5d92b484826375f300a35a76d4a:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e  SQLite.Designer.
0140: 44 65 73 69 67 6e 0d 0a 7b 0d 0a 20 20 75 73 69  Design..{..  usi
0150: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73  ng System;..  us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65  ing System.Colle
0170: 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d  ctions.Generic;.
0180: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0190: 43 6f 6c 6c 65 63 74 69 6f 6e 73 3b 0d 0a 20 20  Collections;..  
01a0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78  using System.Tex
01b0: 74 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  t;..  using Syst
01c0: 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65  em.ComponentMode
01d0: 6c 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  l;..  using Syst
01e0: 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73 69 6e  em.Data;..  usin
01f0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 43 6f  g System.Data.Co
0200: 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53  mmon;..  using S
0210: 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d  ystem.ComponentM
0220: 6f 64 65 6c 2e 44 65 73 69 67 6e 3b 0d 0a 20 20  odel.Design;..  
0230: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 72 61  using System.Dra
0240: 77 69 6e 67 2e 44 65 73 69 67 6e 3b 0d 0a 20 20  wing.Design;..  
0250: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e  using System.Win
0260: 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 20 20 75  dows.Forms;..  u
0270: 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62  sing System.Glob
0280: 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20  alization;....  
0290: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 46  internal class F
02a0: 6f 72 65 69 67 6e 4b 65 79 45 64 69 74 6f 72 20  oreignKeyEditor 
02b0: 3a 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69 74  : CollectionEdit
02c0: 6f 72 0d 0a 20 20 7b 0d 0a 20 20 20 20 54 61 62  or..  {..    Tab
02d0: 6c 65 20 5f 74 61 62 6c 65 3b 0d 0a 20 20 20 20  le _table;..    
02e0: 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f 72  CollectionEditor
02f0: 2e 43 6f 6c 6c 65 63 74 69 6f 6e 46 6f 72 6d 20  .CollectionForm 
0300: 5f 66 6f 72 6d 3b 0d 0a 20 20 20 20 6f 62 6a 65  _form;..    obje
0310: 63 74 5b 5d 20 5f 69 74 65 6d 73 3b 0d 0a 20 20  ct[] _items;..  
0320: 20 20 6f 62 6a 65 63 74 5b 5d 20 5f 6f 72 69 67    object[] _orig
0330: 3b 0d 0a 20 20 20 20 69 6e 74 20 5f 63 6f 75 6e  ;..    int _coun
0340: 74 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  t;....    intern
0350: 61 6c 20 46 6f 72 65 69 67 6e 4b 65 79 45 64 69  al ForeignKeyEdi
0360: 74 6f 72 28 54 61 62 6c 65 20 70 61 72 65 6e 74  tor(Table parent
0370: 29 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28  )..      : base(
0380: 74 79 70 65 6f 66 28 4c 69 73 74 3c 46 6f 72 65  typeof(List<Fore
0390: 69 67 6e 4b 65 79 3e 29 29 0d 0a 20 20 20 20 7b  ignKey>))..    {
03a0: 0d 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20 3d  ..      _table =
03b0: 20 70 61 72 65 6e 74 3b 0d 0a 20 20 20 20 20 20   parent;..      
03c0: 5f 63 6f 75 6e 74 20 3d 20 5f 74 61 62 6c 65 2e  _count = _table.
03d0: 46 6f 72 65 69 67 6e 4b 65 79 73 2e 43 6f 75 6e  ForeignKeys.Coun
03e0: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
03f0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
0400: 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64  ide CollectionEd
0410: 69 74 6f 72 2e 43 6f 6c 6c 65 63 74 69 6f 6e 46  itor.CollectionF
0420: 6f 72 6d 20 43 72 65 61 74 65 43 6f 6c 6c 65 63  orm CreateCollec
0430: 74 69 6f 6e 46 6f 72 6d 28 29 0d 0a 20 20 20 20  tionForm()..    
0440: 7b 0d 0a 20 20 20 20 20 20 5f 66 6f 72 6d 20 3d  {..      _form =
0450: 20 62 61 73 65 2e 43 72 65 61 74 65 43 6f 6c 6c   base.CreateColl
0460: 65 63 74 69 6f 6e 46 6f 72 6d 28 29 3b 0d 0a 20  ectionForm();.. 
0470: 20 20 20 20 20 5f 66 6f 72 6d 2e 54 65 78 74 20       _form.Text 
0480: 3d 20 22 46 6f 72 65 69 67 6e 20 4b 65 79 20 45  = "Foreign Key E
0490: 64 69 74 6f 72 22 3b 0d 0a 20 20 20 20 20 20 66  ditor";..      f
04a0: 6f 72 65 61 63 68 20 28 43 6f 6e 74 72 6f 6c 20  oreach (Control 
04b0: 63 20 69 6e 20 5f 66 6f 72 6d 2e 43 6f 6e 74 72  c in _form.Contr
04c0: 6f 6c 73 5b 30 5d 2e 43 6f 6e 74 72 6f 6c 73 29  ols[0].Controls)
04d0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
04e0: 20 20 20 50 72 6f 70 65 72 74 79 47 72 69 64 20     PropertyGrid 
04f0: 67 72 69 64 20 3d 20 63 20 61 73 20 50 72 6f 70  grid = c as Prop
0500: 65 72 74 79 47 72 69 64 3b 0d 0a 20 20 20 20 20  ertyGrid;..     
0510: 20 20 20 69 66 20 28 67 72 69 64 20 21 3d 20 6e     if (grid != n
0520: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
0530: 0a 20 20 20 20 20 20 20 20 20 20 67 72 69 64 2e  .          grid.
0540: 48 65 6c 70 56 69 73 69 62 6c 65 20 3d 20 74 72  HelpVisible = tr
0550: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  ue;..          b
0560: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d  reak;..        }
0570: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
0580: 20 5f 66 6f 72 6d 2e 57 69 64 74 68 20 3d 20 28   _form.Width = (
0590: 69 6e 74 29 28 5f 66 6f 72 6d 2e 57 69 64 74 68  int)(_form.Width
05a0: 20 2a 20 31 2e 32 35 29 3b 0d 0a 20 20 20 20 20   * 1.25);..     
05b0: 20 5f 66 6f 72 6d 2e 48 65 69 67 68 74 20 3d 20   _form.Height = 
05c0: 28 69 6e 74 29 28 5f 66 6f 72 6d 2e 48 65 69 67  (int)(_form.Heig
05d0: 68 74 20 2a 20 31 2e 32 35 29 3b 0d 0a 0d 0a 20  ht * 1.25);.... 
05e0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 6f 72       return _for
05f0: 6d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  m;..    }....   
0600: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
0610: 69 64 65 20 6f 62 6a 65 63 74 20 43 72 65 61 74  ide object Creat
0620: 65 49 6e 73 74 61 6e 63 65 28 54 79 70 65 20 69  eInstance(Type i
0630: 74 65 6d 54 79 70 65 29 0d 0a 20 20 20 20 7b 0d  temType)..    {.
0640: 0a 20 20 20 20 20 20 69 66 20 28 69 74 65 6d 54  .      if (itemT
0650: 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 46 6f  ype == typeof(Fo
0660: 72 65 69 67 6e 4b 65 79 29 29 0d 0a 20 20 20 20  reignKey))..    
0670: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
0680: 75 72 6e 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b  urn new ForeignK
0690: 65 79 28 6e 75 6c 6c 2c 20 5f 74 61 62 6c 65 2c  ey(null, _table,
06a0: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 7d   null);..      }
06b0: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
06c0: 77 20 4e 6f 74 53 75 70 70 6f 72 74 65 64 45 78  w NotSupportedEx
06d0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20  ception();..    
06e0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
06f0: 65 64 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  ed override obje
0700: 63 74 5b 5d 20 47 65 74 49 74 65 6d 73 28 6f 62  ct[] GetItems(ob
0710: 6a 65 63 74 20 65 64 69 74 56 61 6c 75 65 29 0d  ject editValue).
0720: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
0730: 20 28 5f 69 74 65 6d 73 20 3d 3d 20 6e 75 6c 6c   (_items == null
0740: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
0750: 20 20 20 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e      List<Foreign
0760: 4b 65 79 3e 20 69 74 65 6d 73 20 3d 20 65 64 69  Key> items = edi
0770: 74 56 61 6c 75 65 20 61 73 20 4c 69 73 74 3c 46  tValue as List<F
0780: 6f 72 65 69 67 6e 4b 65 79 3e 3b 0d 0a 20 20 20  oreignKey>;..   
0790: 20 20 20 20 20 5f 69 74 65 6d 73 20 3d 20 6e 65       _items = ne
07a0: 77 20 6f 62 6a 65 63 74 5b 69 74 65 6d 73 2e 43  w object[items.C
07b0: 6f 75 6e 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ount];..        
07c0: 5f 6f 72 69 67 20 3d 20 6e 65 77 20 6f 62 6a 65  _orig = new obje
07d0: 63 74 5b 69 74 65 6d 73 2e 43 6f 75 6e 74 5d 3b  ct[items.Count];
07e0: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69  ..        for (i
07f0: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 69  nt n = 0; n < _i
0800: 74 65 6d 73 2e 4c 65 6e 67 74 68 3b 20 6e 2b 2b  tems.Length; n++
0810: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
0820: 20 20 20 20 20 20 20 20 5f 69 74 65 6d 73 5b 6e          _items[n
0830: 5d 20 3d 20 28 28 49 43 6c 6f 6e 65 61 62 6c 65  ] = ((ICloneable
0840: 29 69 74 65 6d 73 5b 6e 5d 29 2e 43 6c 6f 6e 65  )items[n]).Clone
0850: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  ();..          _
0860: 6f 72 69 67 5b 6e 5d 20 3d 20 69 74 65 6d 73 5b  orig[n] = items[
0870: 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n];..        }..
0880: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72        }..      r
0890: 65 74 75 72 6e 20 5f 69 74 65 6d 73 3b 0d 0a 20  eturn _items;.. 
08a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
08b0: 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 6f  ected override o
08c0: 62 6a 65 63 74 20 53 65 74 49 74 65 6d 73 28 6f  bject SetItems(o
08d0: 62 6a 65 63 74 20 65 64 69 74 56 61 6c 75 65 2c  bject editValue,
08e0: 20 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65 29   object[] value)
08f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62  ..    {..      b
0900: 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73  ool dirty = fals
0910: 65 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 66  e;..      if (_f
0920: 6f 72 6d 2e 44 69 61 6c 6f 67 52 65 73 75 6c 74  orm.DialogResult
0930: 20 3d 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74   == DialogResult
0940: 2e 43 61 6e 63 65 6c 29 20 76 61 6c 75 65 20 3d  .Cancel) value =
0950: 20 5f 6f 72 69 67 3b 0d 0a 0d 0a 20 20 20 20 20   _orig;....     
0960: 20 69 66 20 28 65 64 69 74 56 61 6c 75 65 20 21   if (editValue !
0970: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
0980: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 28  ..        if (!(
0990: 65 64 69 74 56 61 6c 75 65 20 69 73 20 49 4c 69  editValue is ILi
09a0: 73 74 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  st))..        {.
09b0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
09c0: 6e 20 65 64 69 74 56 61 6c 75 65 3b 0d 0a 20 20  n editValue;..  
09d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
09e0: 20 49 4c 69 73 74 20 6c 69 73 74 20 3d 20 28 49   IList list = (I
09f0: 4c 69 73 74 29 65 64 69 74 56 61 6c 75 65 3b 0d  List)editValue;.
0a00: 0a 20 20 20 20 20 20 20 20 6c 69 73 74 2e 43 6c  .        list.Cl
0a10: 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ear();..        
0a20: 66 6f 72 20 28 69 6e 74 20 69 20 3d 20 30 3b 20  for (int i = 0; 
0a30: 69 20 3c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  i < value.Length
0a40: 3b 20 69 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; i++)..        
0a50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 46 6f 72  {..          For
0a60: 65 69 67 6e 4b 65 79 20 66 6b 65 79 20 3d 20 76  eignKey fkey = v
0a70: 61 6c 75 65 5b 69 5d 20 61 73 20 46 6f 72 65 69  alue[i] as Forei
0a80: 67 6e 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  gnKey;....      
0a90: 20 20 20 20 69 66 20 28 66 6b 65 79 20 21 3d 20      if (fkey != 
0aa0: 6e 75 6c 6c 20 26 26 20 53 74 72 69 6e 67 2e 49  null && String.I
0ab0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 6b 65  sNullOrEmpty(fke
0ac0: 79 2e 46 72 6f 6d 2e 43 6f 6c 75 6d 6e 29 20 3d  y.From.Column) =
0ad0: 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e  = false && Strin
0ae0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
0af0: 66 6b 65 79 2e 54 6f 2e 43 61 74 61 6c 6f 67 29  fkey.To.Catalog)
0b00: 20 3d 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20 20   == false &&..  
0b10: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
0b20: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66  .IsNullOrEmpty(f
0b30: 6b 65 79 2e 54 6f 2e 54 61 62 6c 65 29 20 3d 3d  key.To.Table) ==
0b40: 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67   false && String
0b50: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66  .IsNullOrEmpty(f
0b60: 6b 65 79 2e 54 6f 2e 43 6f 6c 75 6d 6e 29 20 3d  key.To.Column) =
0b70: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
0b80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
0b90: 20 20 20 69 66 20 28 66 6b 65 79 2e 49 73 44 69     if (fkey.IsDi
0ba0: 72 74 79 29 20 64 69 72 74 79 20 3d 20 74 72 75  rty) dirty = tru
0bb0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
0bc0: 20 20 6c 69 73 74 2e 41 64 64 28 76 61 6c 75 65    list.Add(value
0bd0: 5b 69 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  [i]);..         
0be0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
0bf0: 20 20 20 20 20 20 20 69 66 20 28 28 64 69 72 74         if ((dirt
0c00: 79 20 3d 3d 20 74 72 75 65 20 7c 7c 20 6c 69 73  y == true || lis
0c10: 74 2e 43 6f 75 6e 74 20 21 3d 20 5f 63 6f 75 6e  t.Count != _coun
0c20: 74 29 20 26 26 20 5f 66 6f 72 6d 2e 44 69 61 6c  t) && _form.Dial
0c30: 6f 67 52 65 73 75 6c 74 20 3d 3d 20 44 69 61 6c  ogResult == Dial
0c40: 6f 67 52 65 73 75 6c 74 2e 4f 4b 29 0d 0a 20 20  ogResult.OK)..  
0c50: 20 20 20 20 20 20 5f 74 61 62 6c 65 2e 4d 61 6b        _table.Mak
0c60: 65 44 69 72 74 79 28 29 3b 0d 0a 20 20 20 20 20  eDirty();..     
0c70: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
0c80: 20 65 64 69 74 56 61 6c 75 65 3b 0d 0a 20 20 20   editValue;..   
0c90: 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 6e 74   }..  }....  int
0ca0: 65 72 6e 61 6c 20 63 6c 61 73 73 20 46 6f 72 65  ernal class Fore
0cb0: 69 67 6e 4b 65 79 49 74 65 6d 20 3a 20 49 48 61  ignKeyItem : IHa
0cc0: 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 63 6f 70  veConnectionScop
0cd0: 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72 69 76  e..  {..    priv
0ce0: 61 74 65 20 73 74 72 69 6e 67 20 5f 63 61 74 61  ate string _cata
0cf0: 6c 6f 67 3b 0d 0a 20 20 20 20 70 72 69 76 61 74  log;..    privat
0d00: 65 20 73 74 72 69 6e 67 20 5f 74 61 62 6c 65 3b  e string _table;
0d10: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
0d20: 72 69 6e 67 20 5f 63 6f 6c 75 6d 6e 3b 0d 0a 20  ring _column;.. 
0d30: 20 20 20 70 72 69 76 61 74 65 20 46 6f 72 65 69     private Forei
0d40: 67 6e 4b 65 79 20 5f 66 6b 65 79 3b 0d 0a 0d 0a  gnKey _fkey;....
0d50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72      internal For
0d60: 65 69 67 6e 4b 65 79 49 74 65 6d 28 46 6f 72 65  eignKeyItem(Fore
0d70: 69 67 6e 4b 65 79 20 66 6b 65 79 2c 20 73 74 72  ignKey fkey, str
0d80: 69 6e 67 20 63 61 74 61 6c 6f 67 2c 20 73 74 72  ing catalog, str
0d90: 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e  ing table, strin
0da0: 67 20 63 6f 6c 75 6d 6e 29 0d 0a 20 20 20 20 7b  g column)..    {
0db0: 0d 0a 20 20 20 20 20 20 5f 63 61 74 61 6c 6f 67  ..      _catalog
0dc0: 20 3d 20 63 61 74 61 6c 6f 67 3b 0d 0a 20 20 20   = catalog;..   
0dd0: 20 20 20 5f 74 61 62 6c 65 20 3d 20 74 61 62 6c     _table = tabl
0de0: 65 3b 0d 0a 20 20 20 20 20 20 5f 63 6f 6c 75 6d  e;..      _colum
0df0: 6e 20 3d 20 63 6f 6c 75 6d 6e 3b 0d 0a 20 20 20  n = column;..   
0e00: 20 20 20 5f 66 6b 65 79 20 3d 20 66 6b 65 79 3b     _fkey = fkey;
0e10: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
0e20: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
0e30: 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29  tring ToString()
0e40: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
0e50: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
0e60: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
0e70: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
0e80: 2c 20 22 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 2e 5b  , "[{0}].[{1}].[
0e90: 7b 32 7d 5d 22 2c 20 5f 63 61 74 61 6c 6f 67 2c  {2}]", _catalog,
0ea0: 20 5f 74 61 62 6c 65 2c 20 5f 63 6f 6c 75 6d 6e   _table, _column
0eb0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
0ec0: 20 23 72 65 67 69 6f 6e 20 49 48 61 76 65 43 6f   #region IHaveCo
0ed0: 6e 6e 65 63 74 69 6f 6e 20 4d 65 6d 62 65 72 73  nnection Members
0ee0: 0d 0a 0d 0a 20 20 20 20 5b 42 72 6f 77 73 61 62  ....    [Browsab
0ef0: 6c 65 28 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20  le(false)]..    
0f00: 70 75 62 6c 69 63 20 56 69 65 77 54 61 62 6c 65  public ViewTable
0f10: 42 61 73 65 20 44 65 73 69 67 6e 54 61 62 6c 65  Base DesignTable
0f20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
0f30: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66 6b 65  et { return _fke
0f40: 79 2e 44 65 73 69 67 6e 54 61 62 6c 65 3b 20 7d  y.DesignTable; }
0f50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
0f60: 75 62 6c 69 63 20 44 62 43 6f 6e 6e 65 63 74 69  ublic DbConnecti
0f70: 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  on GetConnection
0f80: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
0f90: 20 72 65 74 75 72 6e 20 28 28 49 48 61 76 65 43   return ((IHaveC
0fa0: 6f 6e 6e 65 63 74 69 6f 6e 29 5f 66 6b 65 79 29  onnection)_fkey)
0fb0: 2e 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29  .GetConnection()
0fc0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
0fd0: 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65  [Browsable(false
0fe0: 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  )]..    public s
0ff0: 74 72 69 6e 67 20 54 61 62 6c 65 53 63 6f 70 65  tring TableScope
1000: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
1010: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 61 62  et { return _tab
1020: 6c 65 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  le; }..    }....
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 0d 0a 20 20 20 20 70 75 62 6c  alse)]..    publ
1050: 69 63 20 73 74 72 69 6e 67 20 43 61 74 61 6c 6f  ic string Catalo
1060: 67 53 63 6f 70 65 0d 0a 20 20 20 20 7b 0d 0a 20  gScope..    {.. 
1070: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1080: 6e 20 5f 63 61 74 61 6c 6f 67 3b 20 7d 0d 0a 20  n _catalog; }.. 
1090: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 65 6e 64     }....    #end
10a0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 5b 42  region....    [B
10b0: 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d  rowsable(false)]
10c0: 0d 0a 20 20 20 20 5b 45 64 69 74 6f 72 28 74 79  ..    [Editor(ty
10d0: 70 65 6f 66 28 43 61 74 61 6c 6f 67 54 79 70 65  peof(CatalogType
10e0: 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66 28  Editor), typeof(
10f0: 55 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d 0d  UITypeEditor))].
1100: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74  .    public virt
1110: 75 61 6c 20 73 74 72 69 6e 67 20 43 61 74 61 6c  ual string Catal
1120: 6f 67 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  og..    {..     
1130: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 63   get { return _c
1140: 61 74 61 6c 6f 67 3b 20 7d 0d 0a 20 20 20 20 7d  atalog; }..    }
1150: 0d 0a 0d 0a 20 20 20 20 5b 45 64 69 74 6f 72 28  ....    [Editor(
1160: 74 79 70 65 6f 66 28 54 61 62 6c 65 73 54 79 70  typeof(TablesTyp
1170: 65 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66  eEditor), typeof
1180: 28 55 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d  (UITypeEditor))]
1190: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69 72  ..    public vir
11a0: 74 75 61 6c 20 73 74 72 69 6e 67 20 54 61 62 6c  tual string Tabl
11b0: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
11c0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 61  get { return _ta
11d0: 62 6c 65 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  ble; }..    }...
11e0: 0a 20 20 20 20 5b 45 64 69 74 6f 72 28 74 79 70  .    [Editor(typ
11f0: 65 6f 66 28 43 6f 6c 75 6d 6e 73 54 79 70 65 45  eof(ColumnsTypeE
1200: 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55  ditor), typeof(U
1210: 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d 0d 0a  ITypeEditor))]..
1220: 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75      public virtu
1230: 61 6c 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  al string Column
1240: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
1250: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 63 6f 6c  et { return _col
1260: 75 6d 6e 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  umn; }..    }...
1270: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76  .    protected v
1280: 6f 69 64 20 53 65 74 43 61 74 61 6c 6f 67 28 73  oid SetCatalog(s
1290: 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
12a0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f    {..      if (_
12b0: 63 61 74 61 6c 6f 67 20 21 3d 20 76 61 6c 75 65  catalog != value
12c0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
12d0: 20 20 20 20 5f 63 61 74 61 6c 6f 67 20 3d 20 76      _catalog = v
12e0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f  alue;..        _
12f0: 66 6b 65 79 2e 4d 61 6b 65 44 69 72 74 79 28 29  fkey.MakeDirty()
1300: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
1310: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
1320: 65 64 20 76 6f 69 64 20 53 65 74 54 61 62 6c 65  ed void SetTable
1330: 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a  (string value)..
1340: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
1350: 28 5f 74 61 62 6c 65 20 21 3d 20 76 61 6c 75 65  (_table != value
1360: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1370: 20 20 20 20 5f 74 61 62 6c 65 20 3d 20 76 61 6c      _table = val
1380: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 6b  ue;..        _fk
1390: 65 79 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b 0d  ey.MakeDirty();.
13a0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
13b0: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
13c0: 20 76 6f 69 64 20 53 65 74 43 6f 6c 75 6d 6e 28   void SetColumn(
13d0: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
13e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
13f0: 5f 63 6f 6c 75 6d 6e 20 21 3d 20 76 61 6c 75 65  _column != value
1400: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1410: 20 20 20 20 5f 63 6f 6c 75 6d 6e 20 3d 20 76 61      _column = va
1420: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66  lue;..        _f
1430: 6b 65 79 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b  key.MakeDirty();
1440: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1450: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 5b 54 79 70 65  ..  }....  [Type
1460: 43 6f 6e 76 65 72 74 65 72 28 74 79 70 65 6f 66  Converter(typeof
1470: 28 45 78 70 61 6e 64 61 62 6c 65 4f 62 6a 65 63  (ExpandableObjec
1480: 74 43 6f 6e 76 65 72 74 65 72 29 29 5d 0d 0a 20  tConverter))].. 
1490: 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20   internal class 
14a0: 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74  ForeignKeyFromIt
14b0: 65 6d 20 3a 20 46 6f 72 65 69 67 6e 4b 65 79 49  em : ForeignKeyI
14c0: 74 65 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e  tem..  {..    in
14d0: 74 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65  ternal ForeignKe
14e0: 79 46 72 6f 6d 49 74 65 6d 28 46 6f 72 65 69 67  yFromItem(Foreig
14f0: 6e 4b 65 79 20 66 6b 65 79 2c 20 73 74 72 69 6e  nKey fkey, strin
1500: 67 20 63 6f 6c 75 6d 6e 29 0d 0a 20 20 20 20 20  g column)..     
1510: 20 3a 20 62 61 73 65 28 66 6b 65 79 2c 20 66 6b   : base(fkey, fk
1520: 65 79 2e 5f 74 61 62 6c 65 2e 43 61 74 61 6c 6f  ey._table.Catalo
1530: 67 2c 20 66 6b 65 79 2e 5f 74 61 62 6c 65 2e 4e  g, fkey._table.N
1540: 61 6d 65 2c 20 63 6f 6c 75 6d 6e 29 0d 0a 20 20  ame, column)..  
1550: 20 20 7b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    {..    }....  
1560: 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66    [Editor(typeof
1570: 28 43 6f 6c 75 6d 6e 73 54 79 70 65 45 64 69 74  (ColumnsTypeEdit
1580: 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49 54 79  or), typeof(UITy
1590: 70 65 45 64 69 74 6f 72 29 29 5d 0d 0a 20 20 20  peEditor))]..   
15a0: 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54   [Description("T
15b0: 68 65 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  he column of the
15c0: 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20 74   current table t
15d0: 68 61 74 20 72 65 66 65 72 73 20 74 6f 20 74 68  hat refers to th
15e0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 72 65  e foreign key re
15f0: 6c 61 74 69 6f 6e 73 68 69 70 22 29 5d 0d 0a 20  lationship")].. 
1600: 20 20 20 70 75 62 6c 69 63 20 6e 65 77 20 73 74     public new st
1610: 72 69 6e 67 20 43 6f 6c 75 6d 6e 0d 0a 20 20 20  ring Column..   
1620: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20   {..      get { 
1630: 72 65 74 75 72 6e 20 62 61 73 65 2e 43 6f 6c 75  return base.Colu
1640: 6d 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 73 65 74  mn; }..      set
1650: 20 7b 20 53 65 74 43 6f 6c 75 6d 6e 28 76 61 6c   { SetColumn(val
1660: 75 65 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  ue); }..    }...
1670: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
1680: 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20 70 75 62  false)]..    pub
1690: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
16a0: 69 6e 67 20 43 61 74 61 6c 6f 67 0d 0a 20 20 20  ing Catalog..   
16b0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
16c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16d0: 72 65 74 75 72 6e 20 62 61 73 65 2e 43 61 74 61  return base.Cata
16e0: 6c 6f 67 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  log;..      }.. 
16f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 5b 42 72 6f     }....    [Bro
1700: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0d 0a  wsable(false)]..
1710: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
1720: 69 64 65 20 73 74 72 69 6e 67 20 54 61 62 6c 65  ide string Table
1730: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
1740: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
1750: 20 20 20 20 20 72 65 74 75 72 6e 20 62 61 73 65       return base
1760: 2e 44 65 73 69 67 6e 54 61 62 6c 65 2e 4e 61 6d  .DesignTable.Nam
1770: 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  e;..      }..   
1780: 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 5b 54 79   }..  }....  [Ty
1790: 70 65 43 6f 6e 76 65 72 74 65 72 28 74 79 70 65  peConverter(type
17a0: 6f 66 28 45 78 70 61 6e 64 61 62 6c 65 4f 62 6a  of(ExpandableObj
17b0: 65 63 74 43 6f 6e 76 65 72 74 65 72 29 29 5d 0d  ectConverter))].
17c0: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73  .  internal clas
17d0: 73 20 46 6f 72 65 69 67 6e 4b 65 79 54 6f 49 74  s ForeignKeyToIt
17e0: 65 6d 20 3a 20 46 6f 72 65 69 67 6e 4b 65 79 49  em : ForeignKeyI
17f0: 74 65 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e  tem..  {..    in
1800: 74 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e 4b 65  ternal ForeignKe
1810: 79 54 6f 49 74 65 6d 28 46 6f 72 65 69 67 6e 4b  yToItem(ForeignK
1820: 65 79 20 66 6b 65 79 2c 20 73 74 72 69 6e 67 20  ey fkey, string 
1830: 63 61 74 61 6c 6f 67 2c 20 73 74 72 69 6e 67 20  catalog, string 
1840: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
1850: 6c 75 6d 6e 29 0d 0a 20 20 20 20 20 20 3a 20 62  lumn)..      : b
1860: 61 73 65 28 66 6b 65 79 2c 20 63 61 74 61 6c 6f  ase(fkey, catalo
1870: 67 2c 20 74 61 62 6c 65 2c 20 63 6f 6c 75 6d 6e  g, table, column
1880: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 7d 0d  )..    {..    }.
1890: 0a 0d 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  ...    [Browsabl
18a0: 65 28 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20 5b  e(false)]..    [
18b0: 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43 61  Editor(typeof(Ca
18c0: 74 61 6c 6f 67 54 79 70 65 45 64 69 74 6f 72 29  talogTypeEditor)
18d0: 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65 45  , typeof(UITypeE
18e0: 64 69 74 6f 72 29 29 5d 0d 0a 20 20 20 20 5b 44  ditor))]..    [D
18f0: 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20  escription("The 
1900: 64 61 74 61 62 61 73 65 20 63 61 74 61 6c 6f 67  database catalog
1910: 20 28 6d 61 69 6e 2c 20 74 65 6d 70 2c 20 6f 72   (main, temp, or
1920: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20   the name of an 
1930: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1940: 65 29 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  e) to which the 
1950: 66 6f 72 65 69 67 6e 20 6b 65 79 20 72 65 66 65  foreign key refe
1960: 72 73 2e 22 29 5d 0d 0a 20 20 20 20 70 75 62 6c  rs.")]..    publ
1970: 69 63 20 6e 65 77 20 73 74 72 69 6e 67 20 43 61  ic new string Ca
1980: 74 61 6c 6f 67 0d 0a 20 20 20 20 7b 0d 0a 20 20  talog..    {..  
1990: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
19a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
19b0: 20 62 61 73 65 2e 43 61 74 61 6c 6f 67 3b 0d 0a   base.Catalog;..
19c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 73        }..      s
19d0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
19e0: 20 20 20 20 20 53 65 74 43 61 74 61 6c 6f 67 28       SetCatalog(
19f0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 7d  value);..      }
1a00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 5b  ..    }....    [
1a10: 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 42 61 73  DisplayName("Bas
1a20: 65 20 54 61 62 6c 65 22 29 5d 0d 0a 20 20 20 20  e Table")]..    
1a30: 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28 54  [Editor(typeof(T
1a40: 61 62 6c 65 73 54 79 70 65 45 64 69 74 6f 72 29  ablesTypeEditor)
1a50: 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65 45  , typeof(UITypeE
1a60: 64 69 74 6f 72 29 29 5d 0d 0a 20 20 20 20 5b 44  ditor))]..    [D
1a70: 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20  escription("The 
1a80: 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
1a90: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 72  he foreign key r
1aa0: 65 66 65 72 73 2e 22 29 5d 0d 0a 20 20 20 20 70  efers.")]..    p
1ab0: 75 62 6c 69 63 20 6e 65 77 20 73 74 72 69 6e 67  ublic new string
1ac0: 20 54 61 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20   Table..    {.. 
1ad0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1ae0: 6e 20 62 61 73 65 2e 54 61 62 6c 65 3b 20 7d 0d  n base.Table; }.
1af0: 0a 20 20 20 20 20 20 73 65 74 20 7b 20 53 65 74  .      set { Set
1b00: 54 61 62 6c 65 28 76 61 6c 75 65 29 3b 20 7d 0d  Table(value); }.
1b10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 5b 45  .    }....    [E
1b20: 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43 6f 6c  ditor(typeof(Col
1b30: 75 6d 6e 73 54 79 70 65 45 64 69 74 6f 72 29 2c  umnsTypeEditor),
1b40: 20 74 79 70 65 6f 66 28 55 49 54 79 70 65 45 64   typeof(UITypeEd
1b50: 69 74 6f 72 29 29 5d 0d 0a 20 20 20 20 5b 44 65  itor))]..    [De
1b60: 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20 63  scription("The c
1b70: 6f 6c 75 6d 6e 20 74 6f 20 77 68 69 63 68 20 74  olumn to which t
1b80: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 72  he foreign key r
1b90: 65 66 65 72 73 2e 22 29 5d 0d 0a 20 20 20 20 70  efers.")]..    p
1ba0: 75 62 6c 69 63 20 6e 65 77 20 73 74 72 69 6e 67  ublic new string
1bb0: 20 43 6f 6c 75 6d 6e 0d 0a 20 20 20 20 7b 0d 0a   Column..    {..
1bc0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1bd0: 72 6e 20 62 61 73 65 2e 43 6f 6c 75 6d 6e 3b 20  rn base.Column; 
1be0: 7d 0d 0a 20 20 20 20 20 20 73 65 74 20 7b 20 53  }..      set { S
1bf0: 65 74 43 6f 6c 75 6d 6e 28 76 61 6c 75 65 29 3b  etColumn(value);
1c00: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a   }..    }..  }..
1c10: 0d 0a 20 20 5b 44 65 66 61 75 6c 74 50 72 6f 70  ..  [DefaultProp
1c20: 65 72 74 79 28 22 46 72 6f 6d 22 29 5d 0d 0a 20  erty("From")].. 
1c30: 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20   internal class 
1c40: 46 6f 72 65 69 67 6e 4b 65 79 20 3a 20 49 48 61  ForeignKey : IHa
1c50: 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20 49 43  veConnection, IC
1c60: 6c 6f 6e 65 61 62 6c 65 0d 0a 20 20 7b 0d 0a 20  loneable..  {.. 
1c70: 20 20 20 69 6e 74 65 72 6e 61 6c 20 54 61 62 6c     internal Tabl
1c80: 65 20 5f 74 61 62 6c 65 3b 0d 0a 20 20 20 20 69  e _table;..    i
1c90: 6e 74 65 72 6e 61 6c 20 69 6e 74 20 5f 69 64 3b  nternal int _id;
1ca0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 69  ..    internal i
1cb0: 6e 74 20 5f 6f 72 64 69 6e 61 6c 3b 0d 0a 20 20  nt _ordinal;..  
1cc0: 20 20 69 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69    internal Forei
1cd0: 67 6e 4b 65 79 46 72 6f 6d 49 74 65 6d 20 5f 66  gnKeyFromItem _f
1ce0: 72 6f 6d 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rom;..    intern
1cf0: 61 6c 20 46 6f 72 65 69 67 6e 4b 65 79 54 6f 49  al ForeignKeyToI
1d00: 74 65 6d 20 5f 74 6f 3b 0d 0a 20 20 20 20 69 6e  tem _to;..    in
1d10: 74 65 72 6e 61 6c 20 73 74 72 69 6e 67 20 5f 6e  ternal string _n
1d20: 61 6d 65 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ame;..    intern
1d30: 61 6c 20 73 74 72 69 6e 67 20 5f 6f 6e 55 70 64  al string _onUpd
1d40: 61 74 65 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ate;..    intern
1d50: 61 6c 20 73 74 72 69 6e 67 20 5f 6f 6e 44 65 6c  al string _onDel
1d60: 65 74 65 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ete;..    intern
1d70: 61 6c 20 73 74 72 69 6e 67 20 5f 6d 61 74 63 68  al string _match
1d80: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  ;..    private b
1d90: 6f 6f 6c 20 5f 64 69 72 74 79 3b 0d 0a 0d 0a 20  ool _dirty;.... 
1da0: 20 20 20 70 72 69 76 61 74 65 20 46 6f 72 65 69     private Forei
1db0: 67 6e 4b 65 79 28 46 6f 72 65 69 67 6e 4b 65 79  gnKey(ForeignKey
1dc0: 20 73 6f 75 72 63 65 29 0d 0a 20 20 20 20 7b 0d   source)..    {.
1dd0: 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20 3d 20  .      _table = 
1de0: 73 6f 75 72 63 65 2e 5f 74 61 62 6c 65 3b 0d 0a  source._table;..
1df0: 20 20 20 20 20 20 5f 69 64 20 3d 20 73 6f 75 72        _id = sour
1e00: 63 65 2e 5f 69 64 3b 0d 0a 20 20 20 20 20 20 5f  ce._id;..      _
1e10: 6f 72 64 69 6e 61 6c 20 3d 20 73 6f 75 72 63 65  ordinal = source
1e20: 2e 5f 6f 72 64 69 6e 61 6c 3b 0d 0a 20 20 20 20  ._ordinal;..    
1e30: 20 20 5f 66 72 6f 6d 20 3d 20 6e 65 77 20 46 6f    _from = new Fo
1e40: 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74 65 6d  reignKeyFromItem
1e50: 28 74 68 69 73 2c 20 73 6f 75 72 63 65 2e 5f 66  (this, source._f
1e60: 72 6f 6d 2e 43 6f 6c 75 6d 6e 29 3b 0d 0a 20 20  rom.Column);..  
1e70: 20 20 20 20 5f 74 6f 20 3d 20 6e 65 77 20 46 6f      _to = new Fo
1e80: 72 65 69 67 6e 4b 65 79 54 6f 49 74 65 6d 28 74  reignKeyToItem(t
1e90: 68 69 73 2c 20 73 6f 75 72 63 65 2e 5f 74 6f 2e  his, source._to.
1ea0: 43 61 74 61 6c 6f 67 2c 20 73 6f 75 72 63 65 2e  Catalog, source.
1eb0: 5f 74 6f 2e 54 61 62 6c 65 2c 20 73 6f 75 72 63  _to.Table, sourc
1ec0: 65 2e 5f 74 6f 2e 43 6f 6c 75 6d 6e 29 3b 0d 0a  e._to.Column);..
1ed0: 20 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20 73 6f        _name = so
1ee0: 75 72 63 65 2e 5f 6e 61 6d 65 3b 0d 0a 20 20 20  urce._name;..   
1ef0: 20 20 20 5f 6f 6e 55 70 64 61 74 65 20 3d 20 73     _onUpdate = s
1f00: 6f 75 72 63 65 2e 5f 6f 6e 55 70 64 61 74 65 3b  ource._onUpdate;
1f10: 0d 0a 20 20 20 20 20 20 5f 6f 6e 44 65 6c 65 74  ..      _onDelet
1f20: 65 20 3d 20 73 6f 75 72 63 65 2e 5f 6f 6e 44 65  e = source._onDe
1f30: 6c 65 74 65 3b 0d 0a 20 20 20 20 20 20 5f 6d 61  lete;..      _ma
1f40: 74 63 68 20 3d 20 73 6f 75 72 63 65 2e 5f 6d 61  tch = source._ma
1f50: 74 63 68 3b 0d 0a 20 20 20 20 20 20 5f 64 69 72  tch;..      _dir
1f60: 74 79 20 3d 20 73 6f 75 72 63 65 2e 5f 64 69 72  ty = source._dir
1f70: 74 79 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ty;..    }....  
1f80: 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20    internal void 
1f90: 4d 61 6b 65 44 69 72 74 79 28 29 0d 0a 20 20 20  MakeDirty()..   
1fa0: 20 7b 0d 0a 20 20 20 20 20 20 5f 64 69 72 74 79   {..      _dirty
1fb0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 7d 0d   = true;..    }.
1fc0: 0a 0d 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  ...    [Browsabl
1fd0: 65 28 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20 69  e(false)]..    i
1fe0: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 49 73 44  nternal bool IsD
1ff0: 69 72 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  irty..    {..   
2000: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2010: 5f 64 69 72 74 79 3b 20 7d 0d 0a 20 20 20 20 7d  _dirty; }..    }
2020: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2030: 20 76 6f 69 64 20 43 6c 65 61 72 44 69 72 74 79   void ClearDirty
2040: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
2050: 20 5f 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b   _dirty = false;
2060: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2070: 6e 74 65 72 6e 61 6c 20 46 6f 72 65 69 67 6e 4b  nternal ForeignK
2080: 65 79 28 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20  ey(DbConnection 
2090: 63 6e 6e 2c 20 54 61 62 6c 65 20 74 61 62 6c 65  cnn, Table table
20a0: 2c 20 44 61 74 61 52 6f 77 20 72 6f 77 29 0d 0a  , DataRow row)..
20b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 5f 74 61      {..      _ta
20c0: 62 6c 65 20 3d 20 74 61 62 6c 65 3b 0d 0a 20 20  ble = table;..  
20d0: 20 20 20 20 69 66 20 28 72 6f 77 20 21 3d 20 6e      if (row != n
20e0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ull)..      {.. 
20f0: 20 20 20 20 20 20 20 5f 69 64 20 3d 20 28 69 6e         _id = (in
2100: 74 29 72 6f 77 5b 22 46 4b 45 59 5f 49 44 22 5d  t)row["FKEY_ID"]
2110: 3b 0d 0a 20 20 20 20 20 20 20 20 5f 6f 72 64 69  ;..        _ordi
2120: 6e 61 6c 20 3d 20 28 69 6e 74 29 72 6f 77 5b 22  nal = (int)row["
2130: 46 4b 45 59 5f 46 52 4f 4d 5f 4f 52 44 49 4e 41  FKEY_FROM_ORDINA
2140: 4c 5f 50 4f 53 49 54 49 4f 4e 22 5d 3b 0d 0a 20  L_POSITION"];.. 
2150: 20 20 20 20 20 20 20 5f 66 72 6f 6d 20 3d 20 6e         _from = n
2160: 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f  ew ForeignKeyFro
2170: 6d 49 74 65 6d 28 74 68 69 73 2c 20 72 6f 77 5b  mItem(this, row[
2180: 22 46 4b 45 59 5f 46 52 4f 4d 5f 43 4f 4c 55 4d  "FKEY_FROM_COLUM
2190: 4e 22 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  N"].ToString());
21a0: 0d 0a 20 20 20 20 20 20 20 20 5f 74 6f 20 3d 20  ..        _to = 
21b0: 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 54 6f  new ForeignKeyTo
21c0: 49 74 65 6d 28 74 68 69 73 2c 20 72 6f 77 5b 22  Item(this, row["
21d0: 46 4b 45 59 5f 54 4f 5f 43 41 54 41 4c 4f 47 22  FKEY_TO_CATALOG"
21e0: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 2c 20 72 6f  ].ToString(), ro
21f0: 77 5b 22 46 4b 45 59 5f 54 4f 5f 54 41 42 4c 45  w["FKEY_TO_TABLE
2200: 22 5d 2e 54 6f 53 74 72 69 6e 67 28 29 2c 20 72  "].ToString(), r
2210: 6f 77 5b 22 46 4b 45 59 5f 54 4f 5f 43 4f 4c 55  ow["FKEY_TO_COLU
2220: 4d 4e 22 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  MN"].ToString())
2230: 3b 0d 0a 20 20 20 20 20 20 20 20 5f 6e 61 6d 65  ;..        _name
2240: 20 3d 20 72 6f 77 5b 22 43 4f 4e 53 54 52 41 49   = row["CONSTRAI
2250: 4e 54 5f 4e 41 4d 45 22 5d 2e 54 6f 53 74 72 69  NT_NAME"].ToStri
2260: 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 5f  ng();..        _
2270: 6f 6e 55 70 64 61 74 65 20 3d 20 72 6f 77 5b 22  onUpdate = row["
2280: 46 4b 45 59 5f 4f 4e 5f 55 50 44 41 54 45 22 5d  FKEY_ON_UPDATE"]
2290: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
22a0: 20 20 20 20 20 20 5f 6f 6e 44 65 6c 65 74 65 20        _onDelete 
22b0: 3d 20 72 6f 77 5b 22 46 4b 45 59 5f 4f 4e 5f 44  = row["FKEY_ON_D
22c0: 45 4c 45 54 45 22 5d 2e 54 6f 53 74 72 69 6e 67  ELETE"].ToString
22d0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 5f 6d 61  ();..        _ma
22e0: 74 63 68 20 3d 20 72 6f 77 5b 22 46 4b 45 59 5f  tch = row["FKEY_
22f0: 4d 41 54 43 48 22 5d 2e 54 6f 53 74 72 69 6e 67  MATCH"].ToString
2300: 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ();..      }..  
2310: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
2320: 7b 0d 0a 20 20 20 20 20 20 20 20 5f 69 64 20 3d  {..        _id =
2330: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20 5f 6f   -1;..        _o
2340: 72 64 69 6e 61 6c 20 3d 20 2d 31 3b 0d 0a 20 20  rdinal = -1;..  
2350: 20 20 20 20 20 20 5f 66 72 6f 6d 20 3d 20 6e 65        _from = ne
2360: 77 20 46 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d  w ForeignKeyFrom
2370: 49 74 65 6d 28 74 68 69 73 2c 20 53 74 72 69 6e  Item(this, Strin
2380: 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
2390: 20 20 20 5f 74 6f 20 3d 20 6e 65 77 20 46 6f 72     _to = new For
23a0: 65 69 67 6e 4b 65 79 54 6f 49 74 65 6d 28 74 68  eignKeyToItem(th
23b0: 69 73 2c 20 5f 74 61 62 6c 65 2e 43 61 74 61 6c  is, _table.Catal
23c0: 6f 67 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  og, String.Empty
23d0: 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
23e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
23f0: 0d 0a 0d 0a 20 20 20 20 2f 2f 69 6e 74 65 72 6e  ....    //intern
2400: 61 6c 20 76 6f 69 64 20 57 72 69 74 65 53 71 6c  al void WriteSql
2410: 28 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62  (StringBuilder b
2420: 75 69 6c 64 65 72 29 0d 0a 20 20 20 20 2f 2f 7b  uilder)..    //{
2430: 0d 0a 20 20 20 20 2f 2f 20 20 69 66 20 28 53 74  ..    //  if (St
2440: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2450: 74 79 28 5f 66 72 6f 6d 2e 43 6f 6c 75 6d 6e 29  ty(_from.Column)
2460: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
2470: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2480: 79 28 5f 74 6f 2e 43 61 74 61 6c 6f 67 29 20 3d  y(_to.Catalog) =
2490: 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20 20 20 20  = false &&..    
24a0: 2f 2f 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e  //    String.IsN
24b0: 75 6c 6c 4f 72 45 6d 70 74 79 28 5f 74 6f 2e 54  ullOrEmpty(_to.T
24c0: 61 62 6c 65 29 20 3d 3d 20 66 61 6c 73 65 20 26  able) == false &
24d0: 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  & String.IsNullO
24e0: 72 45 6d 70 74 79 28 5f 74 6f 2e 43 6f 6c 75 6d  rEmpty(_to.Colum
24f0: 6e 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20  n) == false)..  
2500: 20 20 2f 2f 20 20 7b 0d 0a 20 20 20 20 2f 2f 20    //  {..    // 
2510: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
2520: 64 46 6f 72 6d 61 74 28 22 43 4f 4e 53 54 52 41  dFormat("CONSTRA
2530: 49 4e 54 20 5b 7b 30 7d 5d 20 46 4f 52 45 49 47  INT [{0}] FOREIG
2540: 4e 20 4b 45 59 20 28 5b 7b 31 7d 5d 29 20 52 45  N KEY ([{1}]) RE
2550: 46 45 52 45 4e 43 45 53 20 5b 7b 33 7d 5d 20 28  FERENCES [{3}] (
2560: 5b 7b 34 7d 5d 29 22 2c 20 4e 61 6d 65 2c 20 5f  [{4}])", Name, _
2570: 66 72 6f 6d 2e 43 6f 6c 75 6d 6e 2c 20 5f 74 6f  from.Column, _to
2580: 2e 43 61 74 61 6c 6f 67 2c 20 5f 74 6f 2e 54 61  .Catalog, _to.Ta
2590: 62 6c 65 2c 20 5f 74 6f 2e 43 6f 6c 75 6d 6e 29  ble, _to.Column)
25a0: 3b 0d 0a 20 20 20 20 2f 2f 20 20 7d 0d 0a 20 20  ;..    //  }..  
25b0: 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 5b 50 61    //}....    [Pa
25c0: 72 65 6e 74 68 65 73 69 7a 65 50 72 6f 70 65 72  renthesizeProper
25d0: 74 79 4e 61 6d 65 28 74 72 75 65 29 5d 0d 0a 20  tyName(true)].. 
25e0: 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 49 64     [Category("Id
25f0: 65 6e 74 69 74 79 22 29 5d 0d 0a 20 20 20 20 5b  entity")]..    [
2600: 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65  Description("The
2610: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 6f 72   name of the for
2620: 65 69 67 6e 20 6b 65 79 2e 22 29 5d 0d 0a 20 20  eign key.")]..  
2630: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
2640: 4e 61 6d 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Name..    {..   
2650: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
2660: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
2670: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2680: 79 28 5f 6e 61 6d 65 29 20 3d 3d 20 66 61 6c 73  y(_name) == fals
2690: 65 29 20 72 65 74 75 72 6e 20 5f 6e 61 6d 65 3b  e) return _name;
26a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
26b0: 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
26c0: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
26d0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22  ariantCulture, "
26e0: 46 4b 5f 7b 30 7d 5f 7b 31 7d 5f 7b 32 7d 22 2c  FK_{0}_{1}_{2}",
26f0: 20 5f 66 72 6f 6d 2e 54 61 62 6c 65 2c 20 5f 69   _from.Table, _i
2700: 64 2c 20 5f 6f 72 64 69 6e 61 6c 29 3b 0d 0a 20  d, _ordinal);.. 
2710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 73 65       }..      se
2720: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2730: 20 20 20 20 69 66 20 28 5f 6e 61 6d 65 20 21 3d      if (_name !=
2740: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20   value)..       
2750: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6e   {..          _n
2760: 61 6d 65 20 3d 20 76 61 6c 75 65 3b 0d 0a 20 20  ame = value;..  
2770: 20 20 20 20 20 20 20 20 4d 61 6b 65 44 69 72 74          MakeDirt
2780: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  y();..        }.
2790: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
27a0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  ...    #region I
27b0: 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4d  HaveConnection M
27c0: 65 6d 62 65 72 73 0d 0a 0d 0a 20 20 20 20 5b 42  embers....    [B
27d0: 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d  rowsable(false)]
27e0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 56 69 65  ..    public Vie
27f0: 77 54 61 62 6c 65 42 61 73 65 20 44 65 73 69 67  wTableBase Desig
2800: 6e 54 61 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  nTable..    {.. 
2810: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2820: 6e 20 5f 74 61 62 6c 65 3b 20 7d 0d 0a 20 20 20  n _table; }..   
2830: 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63   }....    public
2840: 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65   DbConnection Ge
2850: 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 0d 0a 20  tConnection().. 
2860: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
2870: 72 6e 20 28 28 49 48 61 76 65 43 6f 6e 6e 65 63  rn ((IHaveConnec
2880: 74 69 6f 6e 29 5f 74 61 62 6c 65 29 2e 47 65 74  tion)_table).Get
2890: 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 3b 0d 0a 20  Connection();.. 
28a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 65 6e 64     }....    #end
28b0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 5b 44  region....    [D
28c0: 69 73 70 6c 61 79 4e 61 6d 65 28 22 49 64 22 29  isplayName("Id")
28d0: 5d 0d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79  ]..    [Category
28e0: 28 22 49 64 22 29 5d 0d 0a 20 20 20 20 5b 44 65  ("Id")]..    [De
28f0: 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20 69  scription("The i
2900: 64 65 6e 74 69 66 69 65 72 20 6f 66 20 74 68 69  dentifier of thi
2910: 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 22 29  s foreign key.")
2920: 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  ]..    public in
2930: 74 20 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t Id..    {..   
2940: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2950: 5f 69 64 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  _id; }..    }...
2960: 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d  .    [DisplayNam
2970: 65 28 22 4f 72 64 69 6e 61 6c 22 29 5d 0d 0a 20  e("Ordinal")].. 
2980: 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 4f 72     [Category("Or
2990: 64 69 6e 61 6c 22 29 5d 0d 0a 20 20 20 20 5b 44  dinal")]..    [D
29a0: 65 73 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20  escription("The 
29b0: 63 6f 6c 75 6d 6e 20 6f 72 64 69 6e 61 6c 20 6f  column ordinal o
29c0: 66 20 74 68 69 73 20 66 6f 72 65 69 67 6e 20 6b  f this foreign k
29d0: 65 79 2e 22 29 5d 0d 0a 20 20 20 20 70 75 62 6c  ey.")]..    publ
29e0: 69 63 20 69 6e 74 20 4f 72 64 69 6e 61 6c 0d 0a  ic int Ordinal..
29f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2a00: 20 7b 20 72 65 74 75 72 6e 20 5f 6f 72 64 69 6e   { return _ordin
2a10: 61 6c 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  al; }..    }....
2a20: 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65      [DisplayName
2a30: 28 22 46 72 6f 6d 20 4b 65 79 22 29 5d 0d 0a 20  ("From Key")].. 
2a40: 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 46 72     [Category("Fr
2a50: 6f 6d 22 29 5d 0d 0a 20 20 20 20 5b 44 65 73 63  om")]..    [Desc
2a60: 72 69 70 74 69 6f 6e 28 22 54 68 65 20 73 6f 75  ription("The sou
2a70: 72 63 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  rce column in th
2a80: 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20  e current table 
2a90: 74 68 61 74 20 72 65 66 65 72 73 20 74 6f 20 74  that refers to t
2aa0: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 22  he foreign key."
2ab0: 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 46  )]..    public F
2ac0: 6f 72 65 69 67 6e 4b 65 79 46 72 6f 6d 49 74 65  oreignKeyFromIte
2ad0: 6d 20 46 72 6f 6d 0d 0a 20 20 20 20 7b 0d 0a 20  m From..    {.. 
2ae0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2af0: 6e 20 5f 66 72 6f 6d 3b 20 7d 0d 0a 20 20 20 20  n _from; }..    
2b00: 7d 0d 0a 0d 0a 20 20 20 20 5b 44 69 73 70 6c 61  }....    [Displa
2b10: 79 4e 61 6d 65 28 22 54 6f 20 4b 65 79 22 29 5d  yName("To Key")]
2b20: 0d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28  ..    [Category(
2b30: 22 54 6f 22 29 5d 0d 0a 20 20 20 20 5b 44 65 73  "To")]..    [Des
2b40: 63 72 69 70 74 69 6f 6e 28 22 54 68 65 20 74 61  cription("The ta
2b50: 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 20 74  ble and column t
2b60: 6f 20 77 68 69 63 68 20 74 68 65 20 73 70 65 63  o which the spec
2b70: 69 66 69 65 64 20 66 72 6f 6d 20 63 6f 6c 75 6d  ified from colum
2b80: 6e 20 69 73 20 72 65 6c 61 74 65 64 2e 22 29 5d  n is related.")]
2b90: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 46 6f 72  ..    public For
2ba0: 65 69 67 6e 4b 65 79 54 6f 49 74 65 6d 20 54 6f  eignKeyToItem To
2bb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2bc0: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 6f 3b  et { return _to;
2bd0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2be0: 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 4f   [DisplayName("O
2bf0: 6e 20 55 70 64 61 74 65 22 29 5d 0d 0a 20 20 20  n Update")]..   
2c00: 20 5b 43 61 74 65 67 6f 72 79 28 22 41 63 74 69   [Category("Acti
2c10: 6f 6e 22 29 5d 0d 0a 20 20 20 20 5b 44 65 73 63  on")]..    [Desc
2c20: 72 69 70 74 69 6f 6e 28 22 54 68 65 20 61 63 74  ription("The act
2c30: 69 6f 6e 20 74 6f 20 74 61 6b 65 20 77 68 65 6e  ion to take when
2c40: 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 70   modifying the p
2c50: 61 72 65 6e 74 20 6b 65 79 20 76 61 6c 75 65 73  arent key values
2c60: 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
2c70: 72 6f 77 2e 22 29 5d 0d 0a 20 20 20 20 70 75 62  row.")]..    pub
2c80: 6c 69 63 20 73 74 72 69 6e 67 20 4f 6e 55 70 64  lic string OnUpd
2c90: 61 74 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ate..    {..    
2ca0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2cb0: 20 5f 6f 6e 55 70 64 61 74 65 3b 20 7d 0d 0a 20   _onUpdate; }.. 
2cc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 5b 44 69 73     }....    [Dis
2cd0: 70 6c 61 79 4e 61 6d 65 28 22 4f 6e 20 44 65 6c  playName("On Del
2ce0: 65 74 65 22 29 5d 0d 0a 20 20 20 20 5b 43 61 74  ete")]..    [Cat
2cf0: 65 67 6f 72 79 28 22 41 63 74 69 6f 6e 22 29 5d  egory("Action")]
2d00: 0d 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69  ..    [Descripti
2d10: 6f 6e 28 22 54 68 65 20 61 63 74 69 6f 6e 20 74  on("The action t
2d20: 6f 20 74 61 6b 65 20 77 68 65 6e 20 64 65 6c 65  o take when dele
2d30: 74 69 6e 67 20 61 20 72 6f 77 20 66 72 6f 6d 20  ting a row from 
2d40: 74 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65  the parent table
2d50: 2e 22 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63  .")]..    public
2d60: 20 73 74 72 69 6e 67 20 4f 6e 44 65 6c 65 74 65   string OnDelete
2d70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2d80: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 6f   get { return _o
2d90: 6e 44 65 6c 65 74 65 3b 20 7d 0d 0a 20 20 20 20  nDelete; }..    
2da0: 7d 0d 0a 0d 0a 20 20 20 20 5b 44 69 73 70 6c 61  }....    [Displa
2db0: 79 4e 61 6d 65 28 22 4d 61 74 63 68 22 29 5d 0d  yName("Match")].
2dc0: 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22  .    [Category("
2dd0: 4d 61 74 63 68 22 29 5d 0d 0a 20 20 20 20 5b 44  Match")]..    [D
2de0: 65 73 63 72 69 70 74 69 6f 6e 28 22 55 73 65 64  escription("Used
2df0: 20 77 69 74 68 20 63 6f 6d 70 6f 73 69 74 65 20   with composite 
2e00: 66 6f 72 65 69 67 6e 20 6b 65 79 20 64 65 66 69  foreign key defi
2e10: 6e 69 74 69 6f 6e 73 20 74 6f 20 6d 6f 64 69 66  nitions to modif
2e20: 79 20 74 68 65 20 77 61 79 20 4e 55 4c 4c 20 76  y the way NULL v
2e30: 61 6c 75 65 73 20 74 68 61 74 20 6f 63 63 75 72  alues that occur
2e40: 20 69 6e 20 63 68 69 6c 64 20 6b 65 79 73 20 61   in child keys a
2e50: 72 65 20 68 61 6e 64 6c 65 64 2e 20 20 4e 6f 74  re handled.  Not
2e60: 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f   currently suppo
2e70: 72 74 65 64 2e 22 29 5d 0d 0a 20 20 20 20 70 75  rted.")]..    pu
2e80: 62 6c 69 63 20 73 74 72 69 6e 67 20 4d 61 74 63  blic string Matc
2e90: 68 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  h..    {..      
2ea0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2eb0: 6d 61 74 63 68 3b 20 7d 0d 0a 20 20 20 20 7d 0d  match; }..    }.
2ec0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  ...    #region I
2ed0: 43 6c 6f 6e 65 61 62 6c 65 20 4d 65 6d 62 65 72  Cloneable Member
2ee0: 73 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  s....    public 
2ef0: 6f 62 6a 65 63 74 20 43 6c 6f 6e 65 28 29 0d 0a  object Clone()..
2f00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
2f10: 75 72 6e 20 6e 65 77 20 46 6f 72 65 69 67 6e 4b  urn new ForeignK
2f20: 65 79 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 7d  ey(this);..    }
2f30: 0d 0a 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  ....    #endregi
2f40: 6f 6e 0d 0a 20 20 7d 0d 0a 7d                    on..  }..}