1 //---------------------------------------------------------------------
2 // <copyright file="RowTypeElement.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
8 //---------------------------------------------------------------------
10 namespace System.Data.EntityModel.SchemaObjectModel
12 using System.Collections.Generic;
13 using System.Data.Entity;
14 using System.Data.Metadata.Edm;
15 using System.Diagnostics;
18 using Som = System.Data.EntityModel.SchemaObjectModel;
20 class RowTypeElement : ModelFunctionTypeElement
22 private readonly SchemaElementLookUpTable<RowTypePropertyElement> _properties = new SchemaElementLookUpTable<RowTypePropertyElement>();
28 /// <param name="parentElement"></param>
29 internal RowTypeElement(SchemaElement parentElement)
35 protected override bool HandleElement(XmlReader reader)
38 if (CanHandleElement(reader, XmlConstants.Property))
40 HandlePropertyElement(reader);
46 protected void HandlePropertyElement(XmlReader reader)
48 Debug.Assert(reader != null);
50 var property = new RowTypePropertyElement(this);
51 property.Parse(reader);
52 _properties.Add(property, true, Strings.DuplicateEntityContainerMemberName /**/);
57 internal SchemaElementLookUpTable<RowTypePropertyElement> Properties
59 get { return _properties; }
62 internal override void ResolveTopLevelNames()
65 foreach (var property in _properties)
67 property.ResolveTopLevelNames();
72 internal override void WriteIdentity(StringBuilder builder)
74 builder.Append("Row[");
77 foreach (RowTypePropertyElement property in _properties)
87 property.WriteIdentity(builder);
92 internal override TypeUsage GetTypeUsage()
94 if (_typeUsage == null)
96 var listOfProperties = new List<EdmProperty>();
97 foreach (var property in _properties)
99 var edmProperty = new EdmProperty(property.FQName, property.GetTypeUsage());
100 edmProperty.AddMetadataProperties(property.OtherContent);
101 //edmProperty.DeclaringType
102 listOfProperties.Add(edmProperty);
105 RowType rowType = new RowType(listOfProperties);
106 if (Schema.DataModel == SchemaDataModelOption.EntityDataModel)
108 rowType.DataSpace = DataSpace.CSpace;
112 Debug.Assert(Schema.DataModel == SchemaDataModelOption.ProviderDataModel, "Only DataModel == SchemaDataModelOption.ProviderDataModel is expected");
113 rowType.DataSpace = DataSpace.SSpace;
116 rowType.AddMetadataProperties(this.OtherContent);
117 _typeUsage = TypeUsage.Create(rowType);
122 internal override bool ResolveNameAndSetTypeUsage(Converter.ConversionCache convertedItemCache, Dictionary<Som.SchemaElement, GlobalItem> newGlobalItems)
125 if (_typeUsage == null)
127 foreach (var property in _properties)
129 if (!property.ResolveNameAndSetTypeUsage(convertedItemCache, newGlobalItems))
138 internal override void Validate()
140 foreach (var property in _properties)
145 if (_properties.Count == 0)
147 AddError(ErrorCode.RowTypeWithoutProperty, EdmSchemaErrorSeverity.Error, Strings.RowTypeWithoutProperty);