System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 2216fe2cdad42d7e9ae6cd7cc7b40e915aff7a78:


0000: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  //--------------
0010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 3c 63 6f 70  -------..// <cop
0050: 79 72 69 67 68 74 20 66 69 6c 65 3d 22 4d 65 74  yright file="Met
0060: 61 64 61 74 61 48 65 6c 70 65 72 73 2e 63 73 22  adataHelpers.cs"
0070: 20 63 6f 6d 70 61 6e 79 3d 22 4d 69 63 72 6f 73   company="Micros
0080: 6f 66 74 22 3e 0d 0a 2f 2f 20 20 20 20 20 20 50  oft">..//      P
0090: 6f 72 74 69 6f 6e 73 20 6f 66 20 74 68 69 73 20  ortions of this 
00a0: 66 69 6c 65 20 63 6f 70 79 72 69 67 68 74 20 28  file copyright (
00b0: 63 29 20 4d 69 63 72 6f 73 6f 66 74 20 43 6f 72  c) Microsoft Cor
00c0: 70 6f 72 61 74 69 6f 6e 0d 0a 2f 2f 20 20 20 20  poration..//    
00d0: 20 20 61 6e 64 20 61 72 65 20 72 65 6c 65 61 73    and are releas
00e0: 65 64 20 75 6e 64 65 72 20 74 68 65 20 4d 69 63  ed under the Mic
00f0: 72 6f 73 6f 66 74 20 50 75 6c 69 63 20 4c 69 63  rosoft Pulic Lic
0100: 65 6e 73 65 2e 20 20 53 65 65 0d 0a 2f 2f 20 20  ense.  See..//  
0110: 20 20 20 20 68 74 74 70 3a 2f 2f 61 72 63 68 69      http://archi
0120: 76 65 2e 6d 73 64 6e 2e 6d 69 63 72 6f 73 6f 66  ve.msdn.microsof
0130: 74 2e 63 6f 6d 2f 45 46 53 61 6d 70 6c 65 50 72  t.com/EFSamplePr
0140: 6f 76 69 64 65 72 2f 50 72 6f 6a 65 63 74 2f 4c  ovider/Project/L
0150: 69 63 65 6e 73 65 2e 61 73 70 78 0d 0a 2f 2f 20  icense.aspx..// 
0160: 20 20 20 20 20 6f 72 20 4c 69 63 65 6e 73 65 2e       or License.
0170: 74 78 74 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  txt for details.
0180: 0d 0a 2f 2f 20 20 20 20 20 20 41 6c 6c 20 72 69  ..//      All ri
0190: 67 68 74 73 20 72 65 73 65 72 76 65 64 2e 0d 0a  ghts reserved...
01a0: 2f 2f 20 3c 2f 63 6f 70 79 72 69 67 68 74 3e 0d  // </copyright>.
01b0: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .//-------------
01c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01f0: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 23 69 66 20  --------....#if 
0200: 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45  USE_ENTITY_FRAME
0210: 57 4f 52 4b 5f 36 0d 0a 6e 61 6d 65 73 70 61 63  WORK_6..namespac
0220: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0230: 4c 69 74 65 2e 45 46 36 0d 0a 23 65 6c 73 65 0d  Lite.EF6..#else.
0240: 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73 74 65  .namespace Syste
0250: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69  m.Data.SQLite.Li
0260: 6e 71 0d 0a 23 65 6e 64 69 66 0d 0a 7b 0d 0a 20  nq..#endif..{.. 
0270: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
0280: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
0290: 61 74 61 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  ata;..  using Sy
02a0: 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73  stem.Collections
02b0: 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75 73 69  .Generic;..  usi
02c0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
02d0: 73 74 69 63 73 3b 0d 0a 0d 0a 23 69 66 20 55 53  stics;....#if US
02e0: 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f  E_ENTITY_FRAMEWO
02f0: 52 4b 5f 36 0d 0a 20 20 75 73 69 6e 67 20 53 79  RK_6..  using Sy
0300: 73 74 65 6d 2e 44 61 74 61 2e 45 6e 74 69 74 79  stem.Data.Entity
0310: 2e 43 6f 72 65 2e 4d 65 74 61 64 61 74 61 2e 45  .Core.Metadata.E
0320: 64 6d 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 75 73  dm;..#else..  us
0330: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
0340: 4d 65 74 61 64 61 74 61 2e 45 64 6d 3b 0d 0a 23  Metadata.Edm;..#
0350: 65 6e 64 69 66 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c  endif....  /// <
0360: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
0370: 41 20 73 65 74 20 6f 66 20 73 74 61 74 69 63 20  A set of static 
0380: 68 65 6c 70 65 72 73 20 66 6f 72 20 74 79 70 65  helpers for type
0390: 20 6d 65 74 61 64 61 74 61 0d 0a 20 20 2f 2f 2f   metadata..  ///
03a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 73   </summary>..  s
03b0: 74 61 74 69 63 20 63 6c 61 73 73 20 4d 65 74 61  tatic class Meta
03c0: 64 61 74 61 48 65 6c 70 65 72 73 0d 0a 20 20 7b  dataHelpers..  {
03d0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 54 79  ..    #region Ty
03e0: 70 65 20 48 65 6c 70 65 72 73 0d 0a 0d 0a 20 20  pe Helpers....  
03f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0400: 0a 20 20 20 20 2f 2f 2f 20 43 61 73 74 20 74 68  .    /// Cast th
0410: 65 20 45 64 6d 54 79 70 65 20 6f 66 20 74 68 65  e EdmType of the
0420: 20 67 69 76 65 6e 20 74 79 70 65 20 75 73 61 67   given type usag
0430: 65 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20 54  e to the given T
0440: 45 64 6d 54 79 70 65 0d 0a 20 20 20 20 2f 2f 2f  EdmType..    ///
0450: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0460: 20 2f 2f 2f 20 3c 74 79 70 65 70 61 72 61 6d 20   /// <typeparam 
0470: 6e 61 6d 65 3d 22 54 45 64 6d 54 79 70 65 22 3e  name="TEdmType">
0480: 3c 2f 74 79 70 65 70 61 72 61 6d 3e 0d 0a 20 20  </typeparam>..  
0490: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
04a0: 65 3d 22 74 79 70 65 55 73 61 67 65 22 3e 3c 2f  e="typeUsage"></
04b0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
04c0: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
04d0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
04e0: 6c 20 73 74 61 74 69 63 20 54 45 64 6d 54 79 70  l static TEdmTyp
04f0: 65 20 47 65 74 45 64 6d 54 79 70 65 3c 54 45 64  e GetEdmType<TEd
0500: 6d 54 79 70 65 3e 28 54 79 70 65 55 73 61 67 65  mType>(TypeUsage
0510: 20 74 79 70 65 55 73 61 67 65 29 0d 0a 20 20 20   typeUsage)..   
0520: 20 20 20 20 20 77 68 65 72 65 20 54 45 64 6d 54       where TEdmT
0530: 79 70 65 20 3a 20 45 64 6d 54 79 70 65 0d 0a 20  ype : EdmType.. 
0540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
0550: 72 6e 20 28 54 45 64 6d 54 79 70 65 29 74 79 70  rn (TEdmType)typ
0560: 65 55 73 61 67 65 2e 45 64 6d 54 79 70 65 3b 0d  eUsage.EdmType;.
0570: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
0580: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0590: 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 54 79   /// Gets the Ty
05a0: 70 65 55 73 61 67 65 20 6f 66 20 74 68 65 20 65  peUsage of the e
05b0: 6c 6d 65 6e 74 20 69 66 20 74 68 65 20 67 69 76  lment if the giv
05c0: 65 6e 20 74 79 70 65 20 69 73 20 61 20 63 6f 6c  en type is a col
05d0: 6c 65 63 74 69 6f 6e 20 74 79 70 65 0d 0a 20 20  lection type..  
05e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
05f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0600: 20 6e 61 6d 65 3d 22 74 79 70 65 22 3e 3c 2f 70   name="type"></p
0610: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
0620: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
0630: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
0640: 20 73 74 61 74 69 63 20 54 79 70 65 55 73 61 67   static TypeUsag
0650: 65 20 47 65 74 45 6c 65 6d 65 6e 74 54 79 70 65  e GetElementType
0660: 55 73 61 67 65 28 54 79 70 65 55 73 61 67 65 20  Usage(TypeUsage 
0670: 74 79 70 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  type)..    {..  
0680: 20 20 20 20 69 66 20 28 4d 65 74 61 64 61 74 61      if (Metadata
0690: 48 65 6c 70 65 72 73 2e 49 73 43 6f 6c 6c 65 63  Helpers.IsCollec
06a0: 74 69 6f 6e 54 79 70 65 28 74 79 70 65 29 29 0d  tionType(type)).
06b0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
06c0: 20 20 72 65 74 75 72 6e 20 28 28 43 6f 6c 6c 65    return ((Colle
06d0: 63 74 69 6f 6e 54 79 70 65 29 74 79 70 65 2e 45  ctionType)type.E
06e0: 64 6d 54 79 70 65 29 2e 54 79 70 65 55 73 61 67  dmType).TypeUsag
06f0: 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  e;..      }..   
0700: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
0710: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
0720: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0730: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
0740: 68 65 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66  he properties of
0750: 20 69 6e 20 74 68 65 20 45 64 6d 54 79 70 65 20   in the EdmType 
0760: 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20 69  underlying the i
0770: 6e 70 75 74 20 74 79 70 65 20 75 73 61 67 65 2c  nput type usage,
0780: 20 0d 0a 20 20 20 20 2f 2f 2f 20 20 69 66 20 74   ..    ///  if t
0790: 68 61 74 20 45 64 6d 54 79 70 65 20 69 73 20 61  hat EdmType is a
07a0: 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65   structured type
07b0: 20 28 45 6e 74 69 74 79 54 79 70 65 2c 20 52 6f   (EntityType, Ro
07c0: 77 54 79 70 65 29 2e 20 0d 0a 20 20 20 20 2f 2f  wType). ..    //
07d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
07e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
07f0: 65 3d 22 74 79 70 65 55 73 61 67 65 22 3e 3c 2f  e="typeUsage"></
0800: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
0810: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
0820: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
0830: 6c 20 73 74 61 74 69 63 20 49 4c 69 73 74 3c 45  l static IList<E
0840: 64 6d 50 72 6f 70 65 72 74 79 3e 20 47 65 74 50  dmProperty> GetP
0850: 72 6f 70 65 72 74 69 65 73 28 54 79 70 65 55 73  roperties(TypeUs
0860: 61 67 65 20 74 79 70 65 55 73 61 67 65 29 0d 0a  age typeUsage)..
0870: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
0880: 75 72 6e 20 4d 65 74 61 64 61 74 61 48 65 6c 70  urn MetadataHelp
0890: 65 72 73 2e 47 65 74 50 72 6f 70 65 72 74 69 65  ers.GetPropertie
08a0: 73 28 74 79 70 65 55 73 61 67 65 2e 45 64 6d 54  s(typeUsage.EdmT
08b0: 79 70 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ype);..    }....
08c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
08d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
08e0: 65 76 65 73 20 74 68 65 20 70 72 6f 70 65 72 74  eves the propert
08f0: 69 65 73 20 6f 66 20 74 68 65 20 67 69 76 65 6e  ies of the given
0900: 20 45 64 6d 54 79 70 65 2c 20 69 66 20 69 74 20   EdmType, if it 
0910: 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 20 61 20 73  is..    ///  a s
0920: 74 72 75 63 74 75 72 65 64 20 74 79 70 65 20 28  tructured type (
0930: 45 6e 74 69 74 79 54 79 70 65 2c 20 52 6f 77 54  EntityType, RowT
0940: 79 70 65 29 2e 20 0d 0a 20 20 20 20 2f 2f 2f 20  ype). ..    /// 
0950: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0960: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0970: 22 65 64 6d 54 79 70 65 22 3e 3c 2f 70 61 72 61  "edmType"></para
0980: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
0990: 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d  urns></returns>.
09a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
09b0: 61 74 69 63 20 49 4c 69 73 74 3c 45 64 6d 50 72  atic IList<EdmPr
09c0: 6f 70 65 72 74 79 3e 20 47 65 74 50 72 6f 70 65  operty> GetPrope
09d0: 72 74 69 65 73 28 45 64 6d 54 79 70 65 20 65 64  rties(EdmType ed
09e0: 6d 54 79 70 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  mType)..    {.. 
09f0: 20 20 20 20 20 73 77 69 74 63 68 20 28 65 64 6d       switch (edm
0a00: 54 79 70 65 2e 42 75 69 6c 74 49 6e 54 79 70 65  Type.BuiltInType
0a10: 4b 69 6e 64 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Kind)..      {..
0a20: 20 20 20 20 20 20 20 20 63 61 73 65 20 42 75 69          case Bui
0a30: 6c 74 49 6e 54 79 70 65 4b 69 6e 64 2e 43 6f 6d  ltInTypeKind.Com
0a40: 70 6c 65 78 54 79 70 65 3a 0d 0a 20 20 20 20 20  plexType:..     
0a50: 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 43 6f       return ((Co
0a60: 6d 70 6c 65 78 54 79 70 65 29 65 64 6d 54 79 70  mplexType)edmTyp
0a70: 65 29 2e 50 72 6f 70 65 72 74 69 65 73 3b 0d 0a  e).Properties;..
0a80: 20 20 20 20 20 20 20 20 63 61 73 65 20 42 75 69          case Bui
0a90: 6c 74 49 6e 54 79 70 65 4b 69 6e 64 2e 45 6e 74  ltInTypeKind.Ent
0aa0: 69 74 79 54 79 70 65 3a 0d 0a 20 20 20 20 20 20  ityType:..      
0ab0: 20 20 20 20 72 65 74 75 72 6e 20 28 28 45 6e 74      return ((Ent
0ac0: 69 74 79 54 79 70 65 29 65 64 6d 54 79 70 65 29  ityType)edmType)
0ad0: 2e 50 72 6f 70 65 72 74 69 65 73 3b 0d 0a 20 20  .Properties;..  
0ae0: 20 20 20 20 20 20 63 61 73 65 20 42 75 69 6c 74        case Built
0af0: 49 6e 54 79 70 65 4b 69 6e 64 2e 52 6f 77 54 79  InTypeKind.RowTy
0b00: 70 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  pe:..          r
0b10: 65 74 75 72 6e 20 28 28 52 6f 77 54 79 70 65 29  eturn ((RowType)
0b20: 65 64 6d 54 79 70 65 29 2e 50 72 6f 70 65 72 74  edmType).Propert
0b30: 69 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 64 65  ies;..        de
0b40: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
0b50: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4c 69 73    return new Lis
0b60: 74 3c 45 64 6d 50 72 6f 70 65 72 74 79 3e 28 29  t<EdmProperty>()
0b70: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
0b80: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
0b90: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0ba0: 49 73 20 74 68 65 20 67 69 76 65 6e 20 74 79 70  Is the given typ
0bb0: 65 20 75 73 61 67 65 20 6f 76 65 72 20 61 20 63  e usage over a c
0bc0: 6f 6c 6c 65 63 74 69 6f 6e 20 74 79 70 65 0d 0a  ollection type..
0bd0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0be0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
0bf0: 61 6d 20 6e 61 6d 65 3d 22 74 79 70 65 55 73 61  am name="typeUsa
0c00: 67 65 22 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ge"></param>..  
0c10: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
0c20: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
0c30: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62  nternal static b
0c40: 6f 6f 6c 20 49 73 43 6f 6c 6c 65 63 74 69 6f 6e  ool IsCollection
0c50: 54 79 70 65 28 54 79 70 65 55 73 61 67 65 20 74  Type(TypeUsage t
0c60: 79 70 65 55 73 61 67 65 29 0d 0a 20 20 20 20 7b  ypeUsage)..    {
0c70: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d  ..      return M
0c80: 65 74 61 64 61 74 61 48 65 6c 70 65 72 73 2e 49  etadataHelpers.I
0c90: 73 43 6f 6c 6c 65 63 74 69 6f 6e 54 79 70 65 28  sCollectionType(
0ca0: 74 79 70 65 55 73 61 67 65 2e 45 64 6d 54 79 70  typeUsage.EdmTyp
0cb0: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
0cc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0cd0: 0a 20 20 20 20 2f 2f 2f 20 49 73 20 74 68 65 20  .    /// Is the 
0ce0: 67 69 76 65 6e 20 74 79 70 65 20 61 20 63 6f 6c  given type a col
0cf0: 6c 65 63 74 69 6f 6e 20 74 79 70 65 0d 0a 20 20  lection type..  
0d00: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0d10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0d20: 20 6e 61 6d 65 3d 22 74 79 70 65 22 3e 3c 2f 70   name="type"></p
0d30: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
0d40: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
0d50: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
0d60: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 43   static bool IsC
0d70: 6f 6c 6c 65 63 74 69 6f 6e 54 79 70 65 28 45 64  ollectionType(Ed
0d80: 6d 54 79 70 65 20 74 79 70 65 29 0d 0a 20 20 20  mType type)..   
0d90: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
0da0: 20 28 42 75 69 6c 74 49 6e 54 79 70 65 4b 69 6e   (BuiltInTypeKin
0db0: 64 2e 43 6f 6c 6c 65 63 74 69 6f 6e 54 79 70 65  d.CollectionType
0dc0: 20 3d 3d 20 74 79 70 65 2e 42 75 69 6c 74 49 6e   == type.BuiltIn
0dd0: 54 79 70 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20  TypeKind);..    
0de0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
0df0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0e00: 49 73 20 74 68 65 20 67 69 76 65 6e 20 74 79 70  Is the given typ
0e10: 65 20 75 73 61 67 65 20 6f 76 65 72 20 61 20 70  e usage over a p
0e20: 72 69 6d 69 74 69 76 65 20 74 79 70 65 0d 0a 20  rimitive type.. 
0e30: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0e40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0e50: 6d 20 6e 61 6d 65 3d 22 74 79 70 65 22 3e 3c 2f  m name="type"></
0e60: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
0e70: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
0e80: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
0e90: 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  l static bool Is
0ea0: 50 72 69 6d 69 74 69 76 65 54 79 70 65 28 54 79  PrimitiveType(Ty
0eb0: 70 65 55 73 61 67 65 20 74 79 70 65 29 0d 0a 20  peUsage type).. 
0ec0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
0ed0: 72 6e 20 4d 65 74 61 64 61 74 61 48 65 6c 70 65  rn MetadataHelpe
0ee0: 72 73 2e 49 73 50 72 69 6d 69 74 69 76 65 54 79  rs.IsPrimitiveTy
0ef0: 70 65 28 74 79 70 65 2e 45 64 6d 54 79 70 65 29  pe(type.EdmType)
0f00: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
0f10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0f20: 20 20 20 2f 2f 2f 20 49 73 20 74 68 65 20 67 69     /// Is the gi
0f30: 76 65 6e 20 74 79 70 65 20 61 20 70 72 69 6d 69  ven type a primi
0f40: 74 69 76 65 20 74 79 70 65 0d 0a 20 20 20 20 2f  tive type..    /
0f50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0f60: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0f70: 6d 65 3d 22 74 79 70 65 22 3e 3c 2f 70 61 72 61  me="type"></para
0f80: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
0f90: 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d  urns></returns>.
0fa0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
0fb0: 61 74 69 63 20 62 6f 6f 6c 20 49 73 50 72 69 6d  atic bool IsPrim
0fc0: 69 74 69 76 65 54 79 70 65 28 45 64 6d 54 79 70  itiveType(EdmTyp
0fd0: 65 20 74 79 70 65 29 0d 0a 20 20 20 20 7b 0d 0a  e type)..    {..
0fe0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 75        return (Bu
0ff0: 69 6c 74 49 6e 54 79 70 65 4b 69 6e 64 2e 50 72  iltInTypeKind.Pr
1000: 69 6d 69 74 69 76 65 54 79 70 65 20 3d 3d 20 74  imitiveType == t
1010: 79 70 65 2e 42 75 69 6c 74 49 6e 54 79 70 65 4b  ype.BuiltInTypeK
1020: 69 6e 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ind);..    }....
1030: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1040: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 73 20 74 68  >..    /// Is th
1050: 65 20 67 69 76 65 6e 20 74 79 70 65 20 75 73 61  e given type usa
1060: 67 65 20 6f 76 65 72 20 61 20 72 6f 77 20 74 79  ge over a row ty
1070: 70 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  pe..    /// </su
1080: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1090: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70  <param name="typ
10a0: 65 22 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  e"></param>..   
10b0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f   /// <returns></
10c0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
10d0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
10e0: 6f 6c 20 49 73 52 6f 77 54 79 70 65 28 54 79 70  ol IsRowType(Typ
10f0: 65 55 73 61 67 65 20 74 79 70 65 29 0d 0a 20 20  eUsage type)..  
1100: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
1110: 6e 20 4d 65 74 61 64 61 74 61 48 65 6c 70 65 72  n MetadataHelper
1120: 73 2e 49 73 52 6f 77 54 79 70 65 28 74 79 70 65  s.IsRowType(type
1130: 2e 45 64 6d 54 79 70 65 29 3b 0d 0a 20 20 20 20  .EdmType);..    
1140: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
1150: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1160: 49 73 20 74 68 65 20 67 69 76 65 6e 20 74 79 70  Is the given typ
1170: 65 20 61 20 72 6f 77 20 74 79 70 65 0d 0a 20 20  e a row type..  
1180: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1190: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11a0: 20 6e 61 6d 65 3d 22 74 79 70 65 22 3e 3c 2f 70   name="type"></p
11b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11c0: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
11d0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
11e0: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 52   static bool IsR
11f0: 6f 77 54 79 70 65 28 45 64 6d 54 79 70 65 20 74  owType(EdmType t
1200: 79 70 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ype)..    {..   
1210: 20 20 20 72 65 74 75 72 6e 20 28 42 75 69 6c 74     return (Built
1220: 49 6e 54 79 70 65 4b 69 6e 64 2e 52 6f 77 54 79  InTypeKind.RowTy
1230: 70 65 20 3d 3d 20 74 79 70 65 2e 42 75 69 6c 74  pe == type.Built
1240: 49 6e 54 79 70 65 4b 69 6e 64 29 3b 0d 0a 20 20  InTypeKind);..  
1250: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
1260: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1270: 2f 20 47 65 74 73 20 74 68 65 20 74 79 70 65 20  / Gets the type 
1280: 6f 66 20 74 68 65 20 67 69 76 65 6e 20 74 79 70  of the given typ
1290: 65 20 75 73 61 67 65 20 69 66 20 69 74 20 69 73  e usage if it is
12a0: 20 61 20 70 72 69 6d 69 74 69 76 65 20 74 79 70   a primitive typ
12b0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
12c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
12d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 65  param name="type
12e0: 22 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  "></param>..    
12f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1300: 22 74 79 70 65 4b 69 6e 64 22 3e 3c 2f 70 61 72  "typeKind"></par
1310: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1320: 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e  turns></returns>
1330: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
1340: 74 61 74 69 63 20 62 6f 6f 6c 20 54 72 79 47 65  tatic bool TryGe
1350: 74 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69  tPrimitiveTypeKi
1360: 6e 64 28 54 79 70 65 55 73 61 67 65 20 74 79 70  nd(TypeUsage typ
1370: 65 2c 20 6f 75 74 20 50 72 69 6d 69 74 69 76 65  e, out Primitive
1380: 54 79 70 65 4b 69 6e 64 20 74 79 70 65 4b 69 6e  TypeKind typeKin
1390: 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d)..    {..     
13a0: 20 69 66 20 28 74 79 70 65 20 21 3d 20 6e 75 6c   if (type != nul
13b0: 6c 20 26 26 20 74 79 70 65 2e 45 64 6d 54 79 70  l && type.EdmTyp
13c0: 65 20 21 3d 20 6e 75 6c 6c 20 26 26 20 74 79 70  e != null && typ
13d0: 65 2e 45 64 6d 54 79 70 65 2e 42 75 69 6c 74 49  e.EdmType.BuiltI
13e0: 6e 54 79 70 65 4b 69 6e 64 20 3d 3d 20 42 75 69  nTypeKind == Bui
13f0: 6c 74 49 6e 54 79 70 65 4b 69 6e 64 2e 50 72 69  ltInTypeKind.Pri
1400: 6d 69 74 69 76 65 54 79 70 65 29 0d 0a 20 20 20  mitiveType)..   
1410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 79     {..        ty
1420: 70 65 4b 69 6e 64 20 3d 20 28 28 50 72 69 6d 69  peKind = ((Primi
1430: 74 69 76 65 54 79 70 65 29 74 79 70 65 2e 45 64  tiveType)type.Ed
1440: 6d 54 79 70 65 29 2e 50 72 69 6d 69 74 69 76 65  mType).Primitive
1450: 54 79 70 65 4b 69 6e 64 3b 0d 0a 20 20 20 20 20  TypeKind;..     
1460: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
1470: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
1480: 20 20 74 79 70 65 4b 69 6e 64 20 3d 20 64 65 66    typeKind = def
1490: 61 75 6c 74 28 50 72 69 6d 69 74 69 76 65 54 79  ault(PrimitiveTy
14a0: 70 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  peKind);..      
14b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
14c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
14d0: 72 6e 61 6c 20 73 74 61 74 69 63 20 50 72 69 6d  rnal static Prim
14e0: 69 74 69 76 65 54 79 70 65 4b 69 6e 64 20 47 65  itiveTypeKind Ge
14f0: 74 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69  tPrimitiveTypeKi
1500: 6e 64 28 54 79 70 65 55 73 61 67 65 20 74 79 70  nd(TypeUsage typ
1510: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
1520: 20 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69   PrimitiveTypeKi
1530: 6e 64 20 72 65 74 75 72 6e 56 61 6c 75 65 3b 0d  nd returnValue;.
1540: 0a 20 20 20 20 20 20 69 66 20 28 21 4d 65 74 61  .      if (!Meta
1550: 64 61 74 61 48 65 6c 70 65 72 73 2e 54 72 79 47  dataHelpers.TryG
1560: 65 74 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b  etPrimitiveTypeK
1570: 69 6e 64 28 74 79 70 65 2c 20 6f 75 74 20 72 65  ind(type, out re
1580: 74 75 72 6e 56 61 6c 75 65 29 29 0d 0a 20 20 20  turnValue))..   
1590: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 65     {..        De
15a0: 62 75 67 2e 41 73 73 65 72 74 28 66 61 6c 73 65  bug.Assert(false
15b0: 2c 20 22 43 61 6e 6e 6f 74 20 63 72 65 61 74 65  , "Cannot create
15c0: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 6e 6f   parameter of no
15d0: 6e 2d 70 72 69 6d 69 74 69 76 65 20 74 79 70 65  n-primitive type
15e0: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 68 72  ");..        thr
15f0: 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70 70 6f 72  ow new NotSuppor
1600: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 22 43 61  tedException("Ca
1610: 6e 6e 6f 74 20 63 72 65 61 74 65 20 70 61 72 61  nnot create para
1620: 6d 65 74 65 72 20 6f 66 20 6e 6f 6e 2d 70 72 69  meter of non-pri
1630: 6d 69 74 69 76 65 20 74 79 70 65 22 29 3b 0d 0a  mitive type");..
1640: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72        }..      r
1650: 65 74 75 72 6e 20 72 65 74 75 72 6e 56 61 6c 75  eturn returnValu
1660: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
1670: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1680: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
1690: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 6d   value for the m
16a0: 65 74 61 64 61 74 61 20 70 72 6f 70 65 72 74 79  etadata property
16b0: 20 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20   with the given 
16c0: 6e 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  name..    /// </
16d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
16e0: 2f 20 3c 74 79 70 65 70 61 72 61 6d 20 6e 61 6d  / <typeparam nam
16f0: 65 3d 22 54 22 3e 3c 2f 74 79 70 65 70 61 72 61  e="T"></typepara
1700: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1710: 61 6d 20 6e 61 6d 65 3d 22 69 74 65 6d 22 3e 3c  am name="item"><
1720: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1730: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72   <param name="pr
1740: 6f 70 65 72 74 79 4e 61 6d 65 22 3e 3c 2f 70 61  opertyName"></pa
1750: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
1760: 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73  eturns></returns
1770: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1780: 73 74 61 74 69 63 20 54 20 54 72 79 47 65 74 56  static T TryGetV
1790: 61 6c 75 65 46 6f 72 4d 65 74 61 64 61 74 61 50  alueForMetadataP
17a0: 72 6f 70 65 72 74 79 3c 54 3e 28 4d 65 74 61 64  roperty<T>(Metad
17b0: 61 74 61 49 74 65 6d 20 69 74 65 6d 2c 20 73 74  ataItem item, st
17c0: 72 69 6e 67 20 70 72 6f 70 65 72 74 79 4e 61 6d  ring propertyNam
17d0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
17e0: 20 4d 65 74 61 64 61 74 61 50 72 6f 70 65 72 74   MetadataPropert
17f0: 79 20 70 72 6f 70 65 72 74 79 3b 0d 0a 20 20 20  y property;..   
1800: 20 20 20 69 66 20 28 21 69 74 65 6d 2e 4d 65 74     if (!item.Met
1810: 61 64 61 74 61 50 72 6f 70 65 72 74 69 65 73 2e  adataProperties.
1820: 54 72 79 47 65 74 56 61 6c 75 65 28 70 72 6f 70  TryGetValue(prop
1830: 65 72 74 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20  ertyName, true, 
1840: 6f 75 74 20 70 72 6f 70 65 72 74 79 29 29 0d 0a  out property))..
1850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1860: 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 28   return default(
1870: 54 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  T);..      }....
1880: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 54 29        return (T)
1890: 70 72 6f 70 65 72 74 79 2e 56 61 6c 75 65 3b 0d  property.Value;.
18a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
18b0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
18c0: 6f 6c 20 49 73 50 72 69 6d 69 74 69 76 65 54 79  ol IsPrimitiveTy
18d0: 70 65 28 54 79 70 65 55 73 61 67 65 20 74 79 70  pe(TypeUsage typ
18e0: 65 2c 20 50 72 69 6d 69 74 69 76 65 54 79 70 65  e, PrimitiveType
18f0: 4b 69 6e 64 20 70 72 69 6d 69 74 69 76 65 54 79  Kind primitiveTy
1900: 70 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  pe)..    {..    
1910: 20 20 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b    PrimitiveTypeK
1920: 69 6e 64 20 74 79 70 65 4b 69 6e 64 3b 0d 0a 20  ind typeKind;.. 
1930: 20 20 20 20 20 69 66 20 28 54 72 79 47 65 74 50       if (TryGetP
1940: 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64  rimitiveTypeKind
1950: 28 74 79 70 65 2c 20 6f 75 74 20 74 79 70 65 4b  (type, out typeK
1960: 69 6e 64 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ind))..      {..
1970: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
1980: 74 79 70 65 4b 69 6e 64 20 3d 3d 20 70 72 69 6d  typeKind == prim
1990: 69 74 69 76 65 54 79 70 65 29 3b 0d 0a 20 20 20  itiveType);..   
19a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75     }..      retu
19b0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d  rn false;..    }
19c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
19d0: 20 73 74 61 74 69 63 20 44 62 54 79 70 65 20 47   static DbType G
19e0: 65 74 44 62 54 79 70 65 28 50 72 69 6d 69 74 69  etDbType(Primiti
19f0: 76 65 54 79 70 65 4b 69 6e 64 20 70 72 69 6d 69  veTypeKind primi
1a00: 74 69 76 65 54 79 70 65 29 0d 0a 20 20 20 20 7b  tiveType)..    {
1a10: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
1a20: 70 72 69 6d 69 74 69 76 65 54 79 70 65 29 0d 0a  primitiveType)..
1a30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a40: 20 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54   case PrimitiveT
1a50: 79 70 65 4b 69 6e 64 2e 42 69 6e 61 72 79 3a 20  ypeKind.Binary: 
1a60: 72 65 74 75 72 6e 20 44 62 54 79 70 65 2e 42 69  return DbType.Bi
1a70: 6e 61 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 63  nary;..        c
1a80: 61 73 65 20 50 72 69 6d 69 74 69 76 65 54 79 70  ase PrimitiveTyp
1a90: 65 4b 69 6e 64 2e 42 6f 6f 6c 65 61 6e 3a 20 72  eKind.Boolean: r
1aa0: 65 74 75 72 6e 20 44 62 54 79 70 65 2e 42 6f 6f  eturn DbType.Boo
1ab0: 6c 65 61 6e 3b 0d 0a 20 20 20 20 20 20 20 20 63  lean;..        c
1ac0: 61 73 65 20 50 72 69 6d 69 74 69 76 65 54 79 70  ase PrimitiveTyp
1ad0: 65 4b 69 6e 64 2e 42 79 74 65 3a 20 72 65 74 75  eKind.Byte: retu
1ae0: 72 6e 20 44 62 54 79 70 65 2e 42 79 74 65 3b 0d  rn DbType.Byte;.
1af0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 50 72  .        case Pr
1b00: 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e  imitiveTypeKind.
1b10: 44 61 74 65 54 69 6d 65 3a 20 72 65 74 75 72 6e  DateTime: return
1b20: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
1b30: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
1b40: 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e  PrimitiveTypeKin
1b50: 64 2e 44 65 63 69 6d 61 6c 3a 20 72 65 74 75 72  d.Decimal: retur
1b60: 6e 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c  n DbType.Decimal
1b70: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
1b80: 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e  PrimitiveTypeKin
1b90: 64 2e 44 6f 75 62 6c 65 3a 20 72 65 74 75 72 6e  d.Double: return
1ba0: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 3b 0d   DbType.Double;.
1bb0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 50 72  .        case Pr
1bc0: 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e  imitiveTypeKind.
1bd0: 53 69 6e 67 6c 65 3a 20 72 65 74 75 72 6e 20 44  Single: return D
1be0: 62 54 79 70 65 2e 53 69 6e 67 6c 65 3b 0d 0a 20  bType.Single;.. 
1bf0: 20 20 20 20 20 20 20 63 61 73 65 20 50 72 69 6d         case Prim
1c00: 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e 47 75  itiveTypeKind.Gu
1c10: 69 64 3a 20 72 65 74 75 72 6e 20 44 62 54 79 70  id: return DbTyp
1c20: 65 2e 47 75 69 64 3b 0d 0a 20 20 20 20 20 20 20  e.Guid;..       
1c30: 20 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54   case PrimitiveT
1c40: 79 70 65 4b 69 6e 64 2e 49 6e 74 31 36 3a 20 72  ypeKind.Int16: r
1c50: 65 74 75 72 6e 20 44 62 54 79 70 65 2e 49 6e 74  eturn DbType.Int
1c60: 31 36 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  16;..        cas
1c70: 65 20 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b  e PrimitiveTypeK
1c80: 69 6e 64 2e 49 6e 74 33 32 3a 20 72 65 74 75 72  ind.Int32: retur
1c90: 6e 20 44 62 54 79 70 65 2e 49 6e 74 33 32 3b 0d  n DbType.Int32;.
1ca0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 50 72  .        case Pr
1cb0: 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e  imitiveTypeKind.
1cc0: 49 6e 74 36 34 3a 20 72 65 74 75 72 6e 20 44 62  Int64: return Db
1cd0: 54 79 70 65 2e 49 6e 74 36 34 3b 0d 0a 20 20 20  Type.Int64;..   
1ce0: 20 20 20 20 20 2f 2f 63 61 73 65 20 50 72 69 6d       //case Prim
1cf0: 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e 4d 6f  itiveTypeKind.Mo
1d00: 6e 65 79 3a 20 72 65 74 75 72 6e 20 44 62 54 79  ney: return DbTy
1d10: 70 65 2e 44 65 63 69 6d 61 6c 3b 0d 0a 20 20 20  pe.Decimal;..   
1d20: 20 20 20 20 20 63 61 73 65 20 50 72 69 6d 69 74       case Primit
1d30: 69 76 65 54 79 70 65 4b 69 6e 64 2e 53 42 79 74  iveTypeKind.SByt
1d40: 65 3a 20 72 65 74 75 72 6e 20 44 62 54 79 70 65  e: return DbType
1d50: 2e 53 42 79 74 65 3b 0d 0a 20 20 20 20 20 20 20  .SByte;..       
1d60: 20 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54   case PrimitiveT
1d70: 79 70 65 4b 69 6e 64 2e 53 74 72 69 6e 67 3a 20  ypeKind.String: 
1d80: 72 65 74 75 72 6e 20 44 62 54 79 70 65 2e 53 74  return DbType.St
1d90: 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 2f  ring;..        /
1da0: 2f 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54  /case PrimitiveT
1db0: 79 70 65 4b 69 6e 64 2e 55 49 6e 74 31 36 3a 20  ypeKind.UInt16: 
1dc0: 72 65 74 75 72 6e 20 44 62 54 79 70 65 2e 55 49  return DbType.UI
1dd0: 6e 74 31 36 3b 0d 0a 20 20 20 20 20 20 20 20 2f  nt16;..        /
1de0: 2f 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54  /case PrimitiveT
1df0: 79 70 65 4b 69 6e 64 2e 55 49 6e 74 33 32 3a 20  ypeKind.UInt32: 
1e00: 72 65 74 75 72 6e 20 44 62 54 79 70 65 2e 55 49  return DbType.UI
1e10: 6e 74 33 32 3b 0d 0a 20 20 20 20 20 20 20 20 2f  nt32;..        /
1e20: 2f 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54  /case PrimitiveT
1e30: 79 70 65 4b 69 6e 64 2e 55 49 6e 74 36 34 3a 20  ypeKind.UInt64: 
1e40: 72 65 74 75 72 6e 20 44 62 54 79 70 65 2e 55 49  return DbType.UI
1e50: 6e 74 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 2f  nt64;..        /
1e60: 2f 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54  /case PrimitiveT
1e70: 79 70 65 4b 69 6e 64 2e 58 6d 6c 3a 20 72 65 74  ypeKind.Xml: ret
1e80: 75 72 6e 20 44 62 54 79 70 65 2e 58 6d 6c 3b 0d  urn DbType.Xml;.
1e90: 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74  .        default
1ea0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 62  :..          Deb
1eb0: 75 67 2e 46 61 69 6c 28 22 75 6e 6b 6e 6f 77 6e  ug.Fail("unknown
1ec0: 20 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69   PrimitiveTypeKi
1ed0: 6e 64 22 20 2b 20 70 72 69 6d 69 74 69 76 65 54  nd" + primitiveT
1ee0: 79 70 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  ype.ToString());
1ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f  ..          thro
1f00: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1f10: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1f20: 73 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 55  string.Format("U
1f30: 6e 6b 6e 6f 77 6e 20 50 72 69 6d 69 74 69 76 65  nknown Primitive
1f40: 54 79 70 65 4b 69 6e 64 20 7b 30 7d 22 2c 20 70  TypeKind {0}", p
1f50: 72 69 6d 69 74 69 76 65 54 79 70 65 29 29 3b 0d  rimitiveType));.
1f60: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1f70: 0a 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  ...    #endregio
1f80: 6e 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  n....    #region
1f90: 20 46 61 63 65 74 20 53 75 70 70 6f 72 74 0d 0a   Facet Support..
1fa0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
1fb0: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 69 6e 74  tic readonly int
1fc0: 20 55 6e 69 63 6f 64 65 53 74 72 69 6e 67 4d 61   UnicodeStringMa
1fd0: 78 4d 61 78 4c 65 6e 67 74 68 20 3d 20 49 6e 74  xMaxLength = Int
1fe0: 33 32 2e 4d 61 78 56 61 6c 75 65 3b 0d 0a 20 20  32.MaxValue;..  
1ff0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
2000: 63 20 72 65 61 64 6f 6e 6c 79 20 69 6e 74 20 41  c readonly int A
2010: 73 63 69 69 53 74 72 69 6e 67 4d 61 78 4d 61 78  sciiStringMaxMax
2020: 4c 65 6e 67 74 68 20 3d 20 49 6e 74 33 32 2e 4d  Length = Int32.M
2030: 61 78 56 61 6c 75 65 3b 0d 0a 20 20 20 20 69 6e  axValue;..    in
2040: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 72 65  ternal static re
2050: 61 64 6f 6e 6c 79 20 69 6e 74 20 42 69 6e 61 72  adonly int Binar
2060: 79 4d 61 78 4d 61 78 4c 65 6e 67 74 68 20 3d 20  yMaxMaxLength = 
2070: 49 6e 74 33 32 2e 4d 61 78 56 61 6c 75 65 3b 0d  Int32.MaxValue;.
2080: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 46  ...    #region F
2090: 61 63 65 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20  acet Names..    
20a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
20b0: 20 20 20 2f 2f 2f 20 4e 61 6d 65 20 6f 66 20 74     /// Name of t
20c0: 68 65 20 4d 61 78 4c 65 6e 67 74 68 20 46 61 63  he MaxLength Fac
20d0: 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  et..    /// </su
20e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
20f0: 69 63 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  ic static readon
2100: 6c 79 20 73 74 72 69 6e 67 20 4d 61 78 4c 65 6e  ly string MaxLen
2110: 67 74 68 46 61 63 65 74 4e 61 6d 65 20 3d 20 22  gthFacetName = "
2120: 4d 61 78 4c 65 6e 67 74 68 22 3b 0d 0a 0d 0a 20  MaxLength";.... 
2130: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2140: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 61 6d 65 20 6f  ..    /// Name o
2150: 66 20 74 68 65 20 55 6e 69 63 6f 64 65 20 46 61  f the Unicode Fa
2160: 63 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  cet..    /// </s
2170: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
2180: 6c 69 63 20 73 74 61 74 69 63 20 72 65 61 64 6f  lic static reado
2190: 6e 6c 79 20 73 74 72 69 6e 67 20 55 6e 69 63 6f  nly string Unico
21a0: 64 65 46 61 63 65 74 4e 61 6d 65 20 3d 20 22 55  deFacetName = "U
21b0: 6e 69 63 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20 20  nicode";....    
21c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
21d0: 20 20 20 2f 2f 2f 20 4e 61 6d 65 20 6f 66 20 74     /// Name of t
21e0: 68 65 20 46 69 78 65 64 4c 65 6e 67 74 68 20 46  he FixedLength F
21f0: 61 63 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  acet..    /// </
2200: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
2210: 62 6c 69 63 20 73 74 61 74 69 63 20 72 65 61 64  blic static read
2220: 6f 6e 6c 79 20 73 74 72 69 6e 67 20 46 69 78 65  only string Fixe
2230: 64 4c 65 6e 67 74 68 46 61 63 65 74 4e 61 6d 65  dLengthFacetName
2240: 20 3d 20 22 46 69 78 65 64 4c 65 6e 67 74 68 22   = "FixedLength"
2250: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
2260: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2270: 4e 61 6d 65 20 6f 66 20 74 68 65 20 50 72 65 73  Name of the Pres
2280: 65 72 76 65 53 65 63 6f 6e 64 73 20 46 61 63 65  erveSeconds Face
2290: 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  t..    /// </sum
22a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
22b0: 63 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  c static readonl
22c0: 79 20 73 74 72 69 6e 67 20 50 72 65 73 65 72 76  y string Preserv
22d0: 65 53 65 63 6f 6e 64 73 46 61 63 65 74 4e 61 6d  eSecondsFacetNam
22e0: 65 20 3d 20 22 50 72 65 73 65 72 76 65 53 65 63  e = "PreserveSec
22f0: 6f 6e 64 73 22 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  onds";....    //
2300: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2310: 20 2f 2f 2f 20 4e 61 6d 65 20 6f 66 20 74 68 65   /// Name of the
2320: 20 50 72 65 63 69 73 69 6f 6e 20 46 61 63 65 74   Precision Facet
2330: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2340: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2350: 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
2360: 20 73 74 72 69 6e 67 20 50 72 65 63 69 73 69 6f   string Precisio
2370: 6e 46 61 63 65 74 4e 61 6d 65 20 3d 20 22 50 72  nFacetName = "Pr
2380: 65 63 69 73 69 6f 6e 22 3b 0d 0a 0d 0a 20 20 20  ecision";....   
2390: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23a0: 20 20 20 20 2f 2f 2f 20 4e 61 6d 65 20 6f 66 20      /// Name of 
23b0: 74 68 65 20 53 63 61 6c 65 20 46 61 63 65 74 0d  the Scale Facet.
23c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
23d0: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
23e0: 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
23f0: 73 74 72 69 6e 67 20 53 63 61 6c 65 46 61 63 65  string ScaleFace
2400: 74 4e 61 6d 65 20 3d 20 22 53 63 61 6c 65 22 3b  tName = "Scale";
2410: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2420: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  mary>..    /// N
2430: 61 6d 65 20 6f 66 20 74 68 65 20 44 65 66 61 75  ame of the Defau
2440: 6c 74 56 61 6c 75 65 20 46 61 63 65 74 0d 0a 20  ltValue Facet.. 
2450: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2460: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  >..    public st
2470: 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
2480: 72 69 6e 67 20 44 65 66 61 75 6c 74 56 61 6c 75  ring DefaultValu
2490: 65 46 61 63 65 74 4e 61 6d 65 20 3d 20 22 44 65  eFacetName = "De
24a0: 66 61 75 6c 74 56 61 6c 75 65 22 3b 0d 0a 0d 0a  faultValue";....
24b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
24c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 61 6d 65 20  >..    /// Name 
24d0: 6f 66 20 74 68 65 20 4e 75 6c 6c 61 62 6c 65 20  of the Nullable 
24e0: 46 61 63 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Facet..    /// <
24f0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
2500: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
2510: 72 69 6e 67 20 4e 75 6c 6c 61 62 6c 65 46 61 63  ring NullableFac
2520: 65 74 4e 61 6d 65 20 3d 20 22 4e 75 6c 6c 61 62  etName = "Nullab
2530: 6c 65 22 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65  le";..    #endre
2540: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 23 72 65 67  gion....    #reg
2550: 69 6f 6e 20 46 61 63 65 74 20 52 65 74 72 65 69  ion Facet Retrei
2560: 76 61 6c 20 48 65 6c 70 65 72 73 0d 0a 0d 0a 20  val Helpers.... 
2570: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2580: 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 20 74 68  ..    /// Get th
2590: 65 20 76 61 6c 75 65 20 73 70 65 63 69 66 69 65  e value specifie
25a0: 64 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 74  d on the given t
25b0: 79 70 65 20 75 73 61 67 65 20 66 6f 72 20 74 68  ype usage for th
25c0: 65 20 67 69 76 65 6e 20 66 61 63 65 74 20 6e 61  e given facet na
25d0: 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20  me...    /// If 
25e0: 74 68 65 20 66 61 63 65 73 20 64 6f 65 73 20 6e  the faces does n
25f0: 6f 74 20 68 61 76 65 20 61 20 76 61 6c 75 65 20  ot have a value 
2600: 73 70 65 63 69 66 69 64 20 6f 72 20 74 68 61 74  specifid or that
2610: 20 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 20 72   value is null r
2620: 65 74 75 72 6e 73 0d 0a 20 20 20 20 2f 2f 2f 20  eturns..    /// 
2630: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
2640: 65 20 66 6f 72 20 74 68 61 74 20 66 61 63 65 74  e for that facet
2650: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
2660: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
2670: 74 79 70 65 70 61 72 61 6d 20 6e 61 6d 65 3d 22  typeparam name="
2680: 54 22 3e 3c 2f 74 79 70 65 70 61 72 61 6d 3e 0d  T"></typeparam>.
2690: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
26a0: 6e 61 6d 65 3d 22 74 79 70 65 22 3e 3c 2f 70 61  name="type"></pa
26b0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
26c0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 61 63 65 74  aram name="facet
26d0: 4e 61 6d 65 22 3e 3c 2f 70 61 72 61 6d 3e 0d 0a  Name"></param>..
26e0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
26f0: 61 6d 65 3d 22 64 65 66 61 75 6c 74 56 61 6c 75  ame="defaultValu
2700: 65 22 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  e"></param>..   
2710: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f   /// <returns></
2720: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
2730: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 54 20  ternal static T 
2740: 47 65 74 46 61 63 65 74 56 61 6c 75 65 4f 72 44  GetFacetValueOrD
2750: 65 66 61 75 6c 74 3c 54 3e 28 54 79 70 65 55 73  efault<T>(TypeUs
2760: 61 67 65 20 74 79 70 65 2c 20 73 74 72 69 6e 67  age type, string
2770: 20 66 61 63 65 74 4e 61 6d 65 2c 20 54 20 64 65   facetName, T de
2780: 66 61 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20  faultValue)..   
2790: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 47 65 74 20   {..      //Get 
27a0: 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  the value for th
27b0: 65 20 66 61 63 65 74 2c 20 69 66 20 61 6e 79 0d  e facet, if any.
27c0: 0a 20 20 20 20 20 20 46 61 63 65 74 20 66 61 63  .      Facet fac
27d0: 65 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 74  et;..      if (t
27e0: 79 70 65 2e 46 61 63 65 74 73 2e 54 72 79 47 65  ype.Facets.TryGe
27f0: 74 56 61 6c 75 65 28 66 61 63 65 74 4e 61 6d 65  tValue(facetName
2800: 2c 20 66 61 6c 73 65 2c 20 6f 75 74 20 66 61 63  , false, out fac
2810: 65 74 29 20 26 26 20 66 61 63 65 74 2e 56 61 6c  et) && facet.Val
2820: 75 65 20 21 3d 20 6e 75 6c 6c 20 26 26 20 21 66  ue != null && !f
2830: 61 63 65 74 2e 49 73 55 6e 62 6f 75 6e 64 65 64  acet.IsUnbounded
2840: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
2850: 20 20 20 20 72 65 74 75 72 6e 20 28 54 29 66 61      return (T)fa
2860: 63 65 74 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20  cet.Value;..    
2870: 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
2880: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2890: 20 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74    return default
28a0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d  Value;..      }.
28b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
28c0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
28d0: 6f 6c 20 49 73 46 61 63 65 74 56 61 6c 75 65 43  ol IsFacetValueC
28e0: 6f 6e 73 74 61 6e 74 28 54 79 70 65 55 73 61 67  onstant(TypeUsag
28f0: 65 20 74 79 70 65 2c 20 73 74 72 69 6e 67 20 66  e type, string f
2900: 61 63 65 74 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  acetName)..    {
2910: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d  ..      return M
2920: 65 74 61 64 61 74 61 48 65 6c 70 65 72 73 2e 47  etadataHelpers.G
2930: 65 74 46 61 63 65 74 28 28 28 50 72 69 6d 69 74  etFacet(((Primit
2940: 69 76 65 54 79 70 65 29 74 79 70 65 2e 45 64 6d  iveType)type.Edm
2950: 54 79 70 65 29 2e 46 61 63 65 74 44 65 73 63 72  Type).FacetDescr
2960: 69 70 74 69 6f 6e 73 2c 20 66 61 63 65 74 4e 61  iptions, facetNa
2970: 6d 65 29 2e 49 73 43 6f 6e 73 74 61 6e 74 3b 0d  me).IsConstant;.
2980: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
2990: 69 76 61 74 65 20 73 74 61 74 69 63 20 46 61 63  ivate static Fac
29a0: 65 74 44 65 73 63 72 69 70 74 69 6f 6e 20 47 65  etDescription Ge
29b0: 74 46 61 63 65 74 28 49 45 6e 75 6d 65 72 61 62  tFacet(IEnumerab
29c0: 6c 65 3c 46 61 63 65 74 44 65 73 63 72 69 70 74  le<FacetDescript
29d0: 69 6f 6e 3e 20 66 61 63 65 74 43 6f 6c 6c 65 63  ion> facetCollec
29e0: 74 69 6f 6e 2c 20 73 74 72 69 6e 67 20 66 61 63  tion, string fac
29f0: 65 74 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  etName)..    {..
2a00: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 46        foreach (F
2a10: 61 63 65 74 44 65 73 63 72 69 70 74 69 6f 6e 20  acetDescription 
2a20: 66 61 63 65 74 44 65 73 63 72 69 70 74 69 6f 6e  facetDescription
2a30: 20 69 6e 20 66 61 63 65 74 43 6f 6c 6c 65 63 74   in facetCollect
2a40: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ion)..      {.. 
2a50: 20 20 20 20 20 20 20 69 66 20 28 66 61 63 65 74         if (facet
2a60: 44 65 73 63 72 69 70 74 69 6f 6e 2e 46 61 63 65  Description.Face
2a70: 74 4e 61 6d 65 20 3d 3d 20 66 61 63 65 74 4e 61  tName == facetNa
2a80: 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  me)..        {..
2a90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2aa0: 20 66 61 63 65 74 44 65 73 63 72 69 70 74 69 6f   facetDescriptio
2ab0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n;..        }.. 
2ac0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ad0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
2ae0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2af0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2b00: 2f 20 47 69 76 65 6e 20 61 20 66 61 63 65 74 20  / Given a facet 
2b10: 6e 61 6d 65 20 61 6e 64 20 61 6e 20 45 64 6d 54  name and an EdmT
2b20: 79 70 65 2c 20 74 72 69 65 73 20 74 6f 20 67 65  ype, tries to ge
2b30: 74 20 74 68 61 74 20 66 61 63 65 74 27 73 20 64  t that facet's d
2b40: 65 73 63 72 69 70 74 69 6f 6e 2e 0d 0a 20 20 20  escription...   
2b50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2b60: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
2b70: 6e 61 6d 65 3d 22 65 64 6d 54 79 70 65 22 3e 3c  name="edmType"><
2b80: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
2b90: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 61   <param name="fa
2ba0: 63 65 74 4e 61 6d 65 22 3e 3c 2f 70 61 72 61 6d  cetName"></param
2bb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2bc0: 6d 20 6e 61 6d 65 3d 22 66 61 63 65 74 44 65 73  m name="facetDes
2bd0: 63 72 69 70 74 69 6f 6e 22 3e 3c 2f 70 61 72 61  cription"></para
2be0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
2bf0: 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d  urns></returns>.
2c00: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
2c10: 61 74 69 63 20 62 6f 6f 6c 20 54 72 79 47 65 74  atic bool TryGet
2c20: 54 79 70 65 46 61 63 65 74 44 65 73 63 72 69 70  TypeFacetDescrip
2c30: 74 69 6f 6e 42 79 4e 61 6d 65 28 45 64 6d 54 79  tionByName(EdmTy
2c40: 70 65 20 65 64 6d 54 79 70 65 2c 20 73 74 72 69  pe edmType, stri
2c50: 6e 67 20 66 61 63 65 74 4e 61 6d 65 2c 20 6f 75  ng facetName, ou
2c60: 74 20 46 61 63 65 74 44 65 73 63 72 69 70 74 69  t FacetDescripti
2c70: 6f 6e 20 66 61 63 65 74 44 65 73 63 72 69 70 74  on facetDescript
2c80: 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ion)..    {..   
2c90: 20 20 20 66 61 63 65 74 44 65 73 63 72 69 70 74     facetDescript
2ca0: 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ion = null;..   
2cb0: 20 20 20 69 66 20 28 4d 65 74 61 64 61 74 61 48     if (MetadataH
2cc0: 65 6c 70 65 72 73 2e 49 73 50 72 69 6d 69 74 69  elpers.IsPrimiti
2cd0: 76 65 54 79 70 65 28 65 64 6d 54 79 70 65 29 29  veType(edmType))
2ce0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2cf0: 20 20 20 50 72 69 6d 69 74 69 76 65 54 79 70 65     PrimitiveType
2d00: 20 70 72 69 6d 69 74 69 76 65 54 79 70 65 20 3d   primitiveType =
2d10: 20 28 50 72 69 6d 69 74 69 76 65 54 79 70 65 29   (PrimitiveType)
2d20: 65 64 6d 54 79 70 65 3b 0d 0a 20 20 20 20 20 20  edmType;..      
2d30: 20 20 66 6f 72 65 61 63 68 20 28 46 61 63 65 74    foreach (Facet
2d40: 44 65 73 63 72 69 70 74 69 6f 6e 20 66 64 20 69  Description fd i
2d50: 6e 20 70 72 69 6d 69 74 69 76 65 54 79 70 65 2e  n primitiveType.
2d60: 46 61 63 65 74 44 65 73 63 72 69 70 74 69 6f 6e  FacetDescription
2d70: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
2d80: 20 20 20 20 20 20 20 20 20 69 66 20 28 66 61 63           if (fac
2d90: 65 74 4e 61 6d 65 2e 45 71 75 61 6c 73 28 66 64  etName.Equals(fd
2da0: 2e 46 61 63 65 74 4e 61 6d 65 2c 20 53 74 72 69  .FacetName, Stri
2db0: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
2dc0: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
2dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2de0: 20 20 20 20 20 20 20 20 20 20 20 66 61 63 65 74             facet
2df0: 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 66 64  Description = fd
2e00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
2e10: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2e20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2e30: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
2e40: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2e50: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2e60: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
2e70: 62 6f 6f 6c 20 49 73 4e 75 6c 6c 61 62 6c 65 28  bool IsNullable(
2e80: 54 79 70 65 55 73 61 67 65 20 74 79 70 65 29 0d  TypeUsage type).
2e90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 46 61  .    {..      Fa
2ea0: 63 65 74 20 6e 75 6c 6c 61 62 6c 65 46 61 63 65  cet nullableFace
2eb0: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79  t;..      if (ty
2ec0: 70 65 2e 46 61 63 65 74 73 2e 54 72 79 47 65 74  pe.Facets.TryGet
2ed0: 56 61 6c 75 65 28 4e 75 6c 6c 61 62 6c 65 46 61  Value(NullableFa
2ee0: 63 65 74 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  cetName, false, 
2ef0: 6f 75 74 20 6e 75 6c 6c 61 62 6c 65 46 61 63 65  out nullableFace
2f00: 74 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  t))..      {..  
2f10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f        return (bo
2f20: 6f 6c 29 6e 75 6c 6c 61 62 6c 65 46 61 63 65 74  ol)nullableFacet
2f30: 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 7d  .Value;..      }
2f40: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
2f50: 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alse;..    }....
2f60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
2f70: 74 69 63 20 62 6f 6f 6c 20 54 72 79 47 65 74 4d  tic bool TryGetM
2f80: 61 78 4c 65 6e 67 74 68 28 54 79 70 65 55 73 61  axLength(TypeUsa
2f90: 67 65 20 74 79 70 65 2c 20 6f 75 74 20 69 6e 74  ge type, out int
2fa0: 20 6d 61 78 4c 65 6e 67 74 68 29 0d 0a 20 20 20   maxLength)..   
2fb0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 49   {..      if (!I
2fc0: 73 50 72 69 6d 69 74 69 76 65 54 79 70 65 28 74  sPrimitiveType(t
2fd0: 79 70 65 2c 20 50 72 69 6d 69 74 69 76 65 54 79  ype, PrimitiveTy
2fe0: 70 65 4b 69 6e 64 2e 53 74 72 69 6e 67 29 20 26  peKind.String) &
2ff0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 21 49 73  &..          !Is
3000: 50 72 69 6d 69 74 69 76 65 54 79 70 65 28 74 79  PrimitiveType(ty
3010: 70 65 2c 20 50 72 69 6d 69 74 69 76 65 54 79 70  pe, PrimitiveTyp
3020: 65 4b 69 6e 64 2e 42 69 6e 61 72 79 29 29 0d 0a  eKind.Binary))..
3030: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3040: 20 6d 61 78 4c 65 6e 67 74 68 20 3d 20 30 3b 0d   maxLength = 0;.
3050: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3060: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 7d 0d  false;..      }.
3070: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 61  ...      // Bina
3080: 72 79 20 61 6e 64 20 53 74 72 69 6e 67 20 46 69  ry and String Fi
3090: 78 65 64 4c 65 6e 67 74 68 20 66 61 63 65 74 73  xedLength facets
30a0: 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20   share the same 
30b0: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 72 65 74 75  name..      retu
30c0: 72 6e 20 54 72 79 47 65 74 49 6e 74 46 61 63 65  rn TryGetIntFace
30d0: 74 56 61 6c 75 65 28 74 79 70 65 2c 20 4d 61 78  tValue(type, Max
30e0: 4c 65 6e 67 74 68 46 61 63 65 74 4e 61 6d 65 2c  LengthFacetName,
30f0: 20 6f 75 74 20 6d 61 78 4c 65 6e 67 74 68 29 3b   out maxLength);
3100: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3110: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62  nternal static b
3120: 6f 6f 6c 20 54 72 79 47 65 74 49 6e 74 46 61 63  ool TryGetIntFac
3130: 65 74 56 61 6c 75 65 28 54 79 70 65 55 73 61 67  etValue(TypeUsag
3140: 65 20 74 79 70 65 2c 20 73 74 72 69 6e 67 20 66  e type, string f
3150: 61 63 65 74 4e 61 6d 65 2c 20 6f 75 74 20 69 6e  acetName, out in
3160: 74 20 69 6e 74 56 61 6c 75 65 29 0d 0a 20 20 20  t intValue)..   
3170: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 56 61 6c   {..      intVal
3180: 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 46  ue = 0;..      F
3190: 61 63 65 74 20 69 6e 74 46 61 63 65 74 3b 0d 0a  acet intFacet;..
31a0: 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 65  ..      if (type
31b0: 2e 46 61 63 65 74 73 2e 54 72 79 47 65 74 56 61  .Facets.TryGetVa
31c0: 6c 75 65 28 66 61 63 65 74 4e 61 6d 65 2c 20 66  lue(facetName, f
31d0: 61 6c 73 65 2c 20 6f 75 74 20 69 6e 74 46 61 63  alse, out intFac
31e0: 65 74 29 20 26 26 20 69 6e 74 46 61 63 65 74 2e  et) && intFacet.
31f0: 56 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 20 26 26  Value != null &&
3200: 20 21 69 6e 74 46 61 63 65 74 2e 49 73 55 6e 62   !intFacet.IsUnb
3210: 6f 75 6e 64 65 64 29 0d 0a 20 20 20 20 20 20 7b  ounded)..      {
3220: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 56 61 6c  ..        intVal
3230: 75 65 20 3d 20 28 69 6e 74 29 69 6e 74 46 61 63  ue = (int)intFac
3240: 65 74 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  et.Value;..     
3250: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
3260: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
3270: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
3280: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3290: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
32a0: 6f 6c 20 54 72 79 47 65 74 49 73 46 69 78 65 64  ol TryGetIsFixed
32b0: 4c 65 6e 67 74 68 28 54 79 70 65 55 73 61 67 65  Length(TypeUsage
32c0: 20 74 79 70 65 2c 20 6f 75 74 20 62 6f 6f 6c 20   type, out bool 
32d0: 69 73 46 69 78 65 64 4c 65 6e 67 74 68 29 0d 0a  isFixedLength)..
32e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
32f0: 28 21 49 73 50 72 69 6d 69 74 69 76 65 54 79 70  (!IsPrimitiveTyp
3300: 65 28 74 79 70 65 2c 20 50 72 69 6d 69 74 69 76  e(type, Primitiv
3310: 65 54 79 70 65 4b 69 6e 64 2e 53 74 72 69 6e 67  eTypeKind.String
3320: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
3330: 21 49 73 50 72 69 6d 69 74 69 76 65 54 79 70 65  !IsPrimitiveType
3340: 28 74 79 70 65 2c 20 50 72 69 6d 69 74 69 76 65  (type, Primitive
3350: 54 79 70 65 4b 69 6e 64 2e 42 69 6e 61 72 79 29  TypeKind.Binary)
3360: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
3370: 20 20 20 20 69 73 46 69 78 65 64 4c 65 6e 67 74      isFixedLengt
3380: 68 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  h = false;..    
3390: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
33a0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
33b0: 20 20 20 20 2f 2f 20 42 69 6e 61 72 79 20 61 6e      // Binary an
33c0: 64 20 53 74 72 69 6e 67 20 4d 61 78 4c 65 6e 67  d String MaxLeng
33d0: 74 68 20 66 61 63 65 74 73 20 73 68 61 72 65 20  th facets share 
33e0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20  the same name.. 
33f0: 20 20 20 20 20 72 65 74 75 72 6e 20 54 72 79 47       return TryG
3400: 65 74 42 6f 6f 6c 65 61 6e 46 61 63 65 74 56 61  etBooleanFacetVa
3410: 6c 75 65 28 74 79 70 65 2c 20 46 69 78 65 64 4c  lue(type, FixedL
3420: 65 6e 67 74 68 46 61 63 65 74 4e 61 6d 65 2c 20  engthFacetName, 
3430: 6f 75 74 20 69 73 46 69 78 65 64 4c 65 6e 67 74  out isFixedLengt
3440: 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  h);..    }....  
3450: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
3460: 63 20 62 6f 6f 6c 20 54 72 79 47 65 74 42 6f 6f  c bool TryGetBoo
3470: 6c 65 61 6e 46 61 63 65 74 56 61 6c 75 65 28 54  leanFacetValue(T
3480: 79 70 65 55 73 61 67 65 20 74 79 70 65 2c 20 73  ypeUsage type, s
3490: 74 72 69 6e 67 20 66 61 63 65 74 4e 61 6d 65 2c  tring facetName,
34a0: 20 6f 75 74 20 62 6f 6f 6c 20 62 6f 6f 6c 56 61   out bool boolVa
34b0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
34c0: 20 20 20 62 6f 6f 6c 56 61 6c 75 65 20 3d 20 66     boolValue = f
34d0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 46 61 63  alse;..      Fac
34e0: 65 74 20 62 6f 6f 6c 46 61 63 65 74 3b 0d 0a 20  et boolFacet;.. 
34f0: 20 20 20 20 20 69 66 20 28 74 79 70 65 2e 46 61       if (type.Fa
3500: 63 65 74 73 2e 54 72 79 47 65 74 56 61 6c 75 65  cets.TryGetValue
3510: 28 66 61 63 65 74 4e 61 6d 65 2c 20 66 61 6c 73  (facetName, fals
3520: 65 2c 20 6f 75 74 20 62 6f 6f 6c 46 61 63 65 74  e, out boolFacet
3530: 29 20 26 26 20 62 6f 6f 6c 46 61 63 65 74 2e 56  ) && boolFacet.V
3540: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  alue != null).. 
3550: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3560: 62 6f 6f 6c 56 61 6c 75 65 20 3d 20 28 62 6f 6f  boolValue = (boo
3570: 6c 29 62 6f 6f 6c 46 61 63 65 74 2e 56 61 6c 75  l)boolFacet.Valu
3580: 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  e;..        retu
3590: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
35a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
35b0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d  n false;..    }.
35c0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
35d0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 54 72 79 47  static bool TryG
35e0: 65 74 49 73 55 6e 69 63 6f 64 65 28 54 79 70 65  etIsUnicode(Type
35f0: 55 73 61 67 65 20 74 79 70 65 2c 20 6f 75 74 20  Usage type, out 
3600: 62 6f 6f 6c 20 69 73 55 6e 69 63 6f 64 65 29 0d  bool isUnicode).
3610: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
3620: 20 28 21 49 73 50 72 69 6d 69 74 69 76 65 54 79   (!IsPrimitiveTy
3630: 70 65 28 74 79 70 65 2c 20 50 72 69 6d 69 74 69  pe(type, Primiti
3640: 76 65 54 79 70 65 4b 69 6e 64 2e 53 74 72 69 6e  veTypeKind.Strin
3650: 67 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  g))..      {..  
3660: 20 20 20 20 20 20 69 73 55 6e 69 63 6f 64 65 20        isUnicode 
3670: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
3680: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
3690: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
36a0: 20 20 72 65 74 75 72 6e 20 54 72 79 47 65 74 42    return TryGetB
36b0: 6f 6f 6c 65 61 6e 46 61 63 65 74 56 61 6c 75 65  ooleanFacetValue
36c0: 28 74 79 70 65 2c 20 55 6e 69 63 6f 64 65 46 61  (type, UnicodeFa
36d0: 63 65 74 4e 61 6d 65 2c 20 6f 75 74 20 69 73 55  cetName, out isU
36e0: 6e 69 63 6f 64 65 29 3b 0d 0a 20 20 20 20 7d 0d  nicode);..    }.
36f0: 0a 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  ...    #endregio
3700: 6e 0d 0a 0d 0a 20 20 20 20 23 65 6e 64 72 65 67  n....    #endreg
3710: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ion....    inter
3720: 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  nal static bool 
3730: 49 73 43 61 6e 6f 6e 69 63 61 6c 46 75 6e 63 74  IsCanonicalFunct
3740: 69 6f 6e 28 45 64 6d 46 75 6e 63 74 69 6f 6e 20  ion(EdmFunction 
3750: 66 75 6e 63 74 69 6f 6e 29 0d 0a 20 20 20 20 7b  function)..    {
3760: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  ..      return (
3770: 66 75 6e 63 74 69 6f 6e 2e 4e 61 6d 65 73 70 61  function.Namespa
3780: 63 65 4e 61 6d 65 20 3d 3d 20 22 45 64 6d 22 29  ceName == "Edm")
3790: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
37a0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
37b0: 62 6f 6f 6c 20 49 73 53 74 6f 72 65 46 75 6e 63  bool IsStoreFunc
37c0: 74 69 6f 6e 28 45 64 6d 46 75 6e 63 74 69 6f 6e  tion(EdmFunction
37d0: 20 66 75 6e 63 74 69 6f 6e 29 0d 0a 20 20 20 20   function)..    
37e0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
37f0: 21 49 73 43 61 6e 6f 6e 69 63 61 6c 46 75 6e 63  !IsCanonicalFunc
3800: 74 69 6f 6e 28 66 75 6e 63 74 69 6f 6e 29 3b 0d  tion(function);.
3810: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
3820: 20 52 65 74 75 72 6e 73 20 50 61 72 61 6d 65 74   Returns Paramet
3830: 65 72 44 69 72 65 63 74 69 6f 6e 20 63 6f 72 72  erDirection corr
3840: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 67 69 76  esponding to giv
3850: 65 6e 20 50 61 72 61 6d 65 74 65 72 4d 6f 64 65  en ParameterMode
3860: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
3870: 74 61 74 69 63 20 50 61 72 61 6d 65 74 65 72 44  tatic ParameterD
3880: 69 72 65 63 74 69 6f 6e 20 50 61 72 61 6d 65 74  irection Paramet
3890: 65 72 4d 6f 64 65 54 6f 50 61 72 61 6d 65 74 65  erModeToParamete
38a0: 72 44 69 72 65 63 74 69 6f 6e 28 50 61 72 61 6d  rDirection(Param
38b0: 65 74 65 72 4d 6f 64 65 20 6d 6f 64 65 29 0d 0a  eterMode mode)..
38c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 73 77 69      {..      swi
38d0: 74 63 68 20 28 6d 6f 64 65 29 0d 0a 20 20 20 20  tch (mode)..    
38e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
38f0: 65 20 50 61 72 61 6d 65 74 65 72 4d 6f 64 65 2e  e ParameterMode.
3900: 49 6e 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  In:..          r
3910: 65 74 75 72 6e 20 50 61 72 61 6d 65 74 65 72 44  eturn ParameterD
3920: 69 72 65 63 74 69 6f 6e 2e 49 6e 70 75 74 3b 0d  irection.Input;.
3930: 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ...        case 
3940: 50 61 72 61 6d 65 74 65 72 4d 6f 64 65 2e 49 6e  ParameterMode.In
3950: 4f 75 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  Out:..          
3960: 72 65 74 75 72 6e 20 50 61 72 61 6d 65 74 65 72  return Parameter
3970: 44 69 72 65 63 74 69 6f 6e 2e 49 6e 70 75 74 4f  Direction.InputO
3980: 75 74 70 75 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  utput;....      
3990: 20 20 63 61 73 65 20 50 61 72 61 6d 65 74 65 72    case Parameter
39a0: 4d 6f 64 65 2e 4f 75 74 3a 0d 0a 20 20 20 20 20  Mode.Out:..     
39b0: 20 20 20 20 20 72 65 74 75 72 6e 20 50 61 72 61       return Para
39c0: 6d 65 74 65 72 44 69 72 65 63 74 69 6f 6e 2e 4f  meterDirection.O
39d0: 75 74 70 75 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  utput;....      
39e0: 20 20 63 61 73 65 20 50 61 72 61 6d 65 74 65 72    case Parameter
39f0: 4d 6f 64 65 2e 52 65 74 75 72 6e 56 61 6c 75 65  Mode.ReturnValue
3a00: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
3a10: 75 72 6e 20 50 61 72 61 6d 65 74 65 72 44 69 72  urn ParameterDir
3a20: 65 63 74 69 6f 6e 2e 52 65 74 75 72 6e 56 61 6c  ection.ReturnVal
3a30: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64  ue;....        d
3a40: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
3a50: 20 20 20 44 65 62 75 67 2e 46 61 69 6c 28 22 75     Debug.Fail("u
3a60: 6e 72 65 63 6f 67 6e 69 7a 65 64 20 6d 6f 64 65  nrecognized mode
3a70: 20 22 20 2b 20 6d 6f 64 65 2e 54 6f 53 74 72 69   " + mode.ToStri
3a80: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
3a90: 20 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74    return default
3aa0: 28 50 61 72 61 6d 65 74 65 72 44 69 72 65 63 74  (ParameterDirect
3ab0: 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ion);..      }..
3ac0: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a         }..  }..}..