1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
//---------------------------------------------------------------------
// <copyright file="StorageComplexPropertyMapping.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//
// @owner Microsoft
// @backupOwner Microsoft
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Data.Metadata.Edm;
namespace System.Data.Mapping {
/// <summary>
/// Mapping metadata for Complex properties.
/// </summary>
/// <example>
/// For Example if conceptually you could represent the CS MSL file as following
/// --Mapping
/// --EntityContainerMapping ( CNorthwind-->SNorthwind )
/// --EntitySetMapping
/// --EntityTypeMapping
/// --MappingFragment
/// --EntityKey
/// --ScalarPropertyMap ( CMemberMetadata-->SMemberMetadata )
/// --ScalarPropertyMap ( CMemberMetadata-->SMemberMetadata )
/// --EntityTypeMapping
/// --MappingFragment
/// --EntityKey
/// --ScalarPropertyMap ( CMemberMetadata-->SMemberMetadata )
/// --ComplexPropertyMap
/// --ComplexTypeMapping
/// --ScalarPropertyMap ( CMemberMetadata-->SMemberMetadata )
/// --ScalarProperyMap ( CMemberMetadata-->SMemberMetadata )
/// --DiscriminatorProperyMap ( constant value-->SMemberMetadata )
/// --ComplexTypeMapping
/// --ScalarPropertyMap ( CMemberMetadata-->SMemberMetadata )
/// --ScalarProperyMap ( CMemberMetadata-->SMemberMetadata )
/// --DiscriminatorProperyMap ( constant value-->SMemberMetadata )
/// --ScalarPropertyMap ( CMemberMetadata-->SMemberMetadata )
/// --AssociationSetMapping
/// --AssociationTypeMapping
/// --MappingFragment
/// --EndPropertyMap
/// --ScalarPropertyMap ( CMemberMetadata-->SMemberMetadata )
/// --ScalarProperyMap ( CMemberMetadata-->SMemberMetadata )
/// --EndPropertyMap
/// --ScalarPropertyMap ( CMemberMetadata-->SMemberMetadata )
/// This class represents the metadata for all the complex property map elements in the
/// above example. ComplexPropertyMaps contain ComplexTypeMaps which define mapping based
/// on the type of the ComplexProperty in case of inheritance.
/// </example>
internal class StorageComplexPropertyMapping : StoragePropertyMapping {
#region Constructors
/// <summary>
/// Construct a new Complex Property mapping object
/// </summary>
/// <param name="cdmMember">The MemberMetadata object that represents this Complex member</param>
internal StorageComplexPropertyMapping(EdmProperty cdmMember)
: base(cdmMember) {
this.m_typeMappings = new List<StorageComplexTypeMapping>();
}
#endregion
#region Fields
/// <summary>
/// Set of type mappings that make up the EdmProperty mapping.
/// </summary>
private List<StorageComplexTypeMapping> m_typeMappings;
#endregion
#region Properties
///// <summary>
///// The property Metadata object for which the mapping is represented.
///// </summary>
//internal EdmProperty ComplexProperty {
// get {
// return this.EdmProperty;
// }
//}
/// <summary>
/// TypeMappings that make up this property.
/// </summary>
internal ReadOnlyCollection<StorageComplexTypeMapping> TypeMappings
{
get
{
return this.m_typeMappings.AsReadOnly();
}
}
#endregion
#region Methods
/// <summary>
/// Add type mapping as a child under this Property Mapping
/// </summary>
/// <param name="typeMapping"></param>
internal void AddTypeMapping(StorageComplexTypeMapping typeMapping)
{
this.m_typeMappings.Add(typeMapping);
}
/// <summary>
/// This method is primarily for debugging purposes.
/// Will be removed shortly.
/// </summary>
/// <param name="index"></param>
internal override void Print(int index) {
StorageEntityContainerMapping.GetPrettyPrintString(ref index);
StringBuilder sb = new StringBuilder();
sb.Append("ComplexPropertyMapping");
sb.Append(" ");
if (this.EdmProperty != null) {
sb.Append("Name:");
sb.Append(this.EdmProperty.Name);
sb.Append(" ");
}
Console.WriteLine(sb.ToString());
foreach (StorageComplexTypeMapping typeMapping in TypeMappings)
{
typeMapping.Print(index + 5);
}
}
#endregion
}
}
|