Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / TypeElement.cs / 1 / TypeElement.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Data.Metadata.Edm; using System.Xml; using System.Data.Common; using System.Diagnostics; namespace System.Data.EntityModel.SchemaObjectModel { ////// Responsible for parsing Type ProviderManifest /// xml elements /// internal class TypeElement : SchemaType { PrimitiveType _primitiveType = new PrimitiveType(); List_facetDescriptions = new List (); public TypeElement(Schema parent) : base(parent) { _primitiveType.NamespaceName = Schema.Namespace; } protected override bool HandleElement(XmlReader reader) { if (base.HandleElement(reader)) { return true; } else if (CanHandleElement(reader, XmlConstants.FacetDescriptionsElement)) { SkipThroughElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.PrecisionElement)) { HandlePrecisionElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.ScaleElement)) { HandleScaleElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.MaxLengthElement)) { HandleMaxLengthElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.UnicodeElement)) { HandleUnicodeElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.FixedLengthElement)) { HandleFixedLengthElement(reader); return true; } return false; } protected override bool HandleAttribute(XmlReader reader) { if (base.HandleAttribute(reader)) { return true; } else if (CanHandleAttribute(reader, XmlConstants.PrimitiveTypeKindAttribute)) { HandlePrimitiveTypeKindAttribute(reader); return true; } return false; } ///////////////////////////////////////////////////////////////////// // Element Handlers /// /// Handler for the Precision element /// /// xml reader currently positioned at Precision element private void HandlePrecisionElement(XmlReader reader) { Debug.Assert(reader != null); ByteFacetDescriptionElement facetDescription = new ByteFacetDescriptionElement(this, DbProviderManifest.PrecisionFacetName); facetDescription.Parse(reader); // Bug 476451: Preventing decimal precision to be more than 29 since clr // decimal is capable of holding decimals upto 29 precision if ((this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Decimal) && (facetDescription.MaxValue > EdmProviderManifest.MaximumDecimalPrecision)) { AddError(ErrorCode.PrecisionMoreThanAllowedMax, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.PrecisionMoreThanAllowedMax(facetDescription.MaxValue, EdmProviderManifest.MaximumDecimalPrecision)); } else if (((this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.DateTime) || (this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.DateTimeOffset) || (this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Time)) && (facetDescription.MaxValue > EdmProviderManifest.MaximumDateTimePrecision)) { AddError(ErrorCode.PrecisionMoreThanAllowedMax, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.PrecisionMoreThanAllowedMax(facetDescription.MaxValue, EdmProviderManifest.MaximumDateTimePrecision)); } else { _facetDescriptions.Add(facetDescription); } } ////// Handler for the Scale element /// /// xml reader currently positioned at Scale element private void HandleScaleElement(XmlReader reader) { Debug.Assert(reader != null); ByteFacetDescriptionElement facetDescription = new ByteFacetDescriptionElement(this, DbProviderManifest.ScaleFacetName); facetDescription.Parse(reader); _facetDescriptions.Add(facetDescription); } ////// Handler for the MaxLength element /// /// xml reader currently positioned at MaxLength element private void HandleMaxLengthElement(XmlReader reader) { Debug.Assert(reader != null); IntegerFacetDescriptionElement facetDescription = new IntegerFacetDescriptionElement(this, DbProviderManifest.MaxLengthFacetName); facetDescription.Parse(reader); _facetDescriptions.Add(facetDescription); } ////// Handler for the Unicode element /// /// xml reader currently positioned at Unicode element private void HandleUnicodeElement(XmlReader reader) { Debug.Assert(reader != null); BooleanFacetDescriptionElement facetDescription = new BooleanFacetDescriptionElement(this, DbProviderManifest.UnicodeFacetName); facetDescription.Parse(reader); _facetDescriptions.Add(facetDescription); } ////// Handler for the FixedLength element /// /// xml reader currently positioned at FixedLength element private void HandleFixedLengthElement(XmlReader reader) { Debug.Assert(reader != null); BooleanFacetDescriptionElement facetDescription = new BooleanFacetDescriptionElement(this, DbProviderManifest.FixedLengthFacetName); facetDescription.Parse(reader); _facetDescriptions.Add(facetDescription); } ///////////////////////////////////////////////////////////////////// // Attribute Handlers ////// Handler for the PrimitiveTypeKind attribute /// /// xml reader currently positioned at Version attribute private void HandlePrimitiveTypeKindAttribute(XmlReader reader) { Debug.Assert(reader != null); string value = reader.Value; try { _primitiveType.PrimitiveTypeKind = (PrimitiveTypeKind)Enum.Parse(typeof(PrimitiveTypeKind), value); _primitiveType.BaseType = MetadataItem.EdmProviderManifest.GetPrimitiveType(_primitiveType.PrimitiveTypeKind); } catch (ArgumentException) { AddError(ErrorCode.InvalidPrimitiveTypeKind, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidPrimitiveTypeKind(value)); } } public override string Name { get { return _primitiveType.Name; } set { _primitiveType.Name = value; } } public PrimitiveType PrimitiveType { get { return _primitiveType; } } public IEnumerableFacetDescriptions { get { foreach (FacetDescriptionElement element in _facetDescriptions) { yield return element.FacetDescription; } } } internal override void ResolveTopLevelNames() { base.ResolveTopLevelNames(); // Call validate on the facet descriptions foreach (FacetDescriptionElement facetDescription in _facetDescriptions) { try { facetDescription.CreateAndValidateFacetDescription(this.Name); } catch (ArgumentException e) { AddError(ErrorCode.InvalidFacetInProviderManifest, EdmSchemaErrorSeverity.Error, e.Message); } } // facet descriptions don't have any names to resolve } internal override void Validate() { base.Validate(); if (!ValidateSufficientFacets()) { // the next checks will ---- up, so get out // if we had errors return; } if (!ValidateInterFacetConsistency()) { return; } } private bool ValidateInterFacetConsistency() { if (PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Decimal) { FacetDescription precisionFacetDescription = Helper.GetFacet(FacetDescriptions, EdmProviderManifest.PrecisionFacetName); FacetDescription scaleFacetDescription = Helper.GetFacet(FacetDescriptions, EdmProviderManifest.ScaleFacetName); if(precisionFacetDescription.MaxValue.Value < scaleFacetDescription.MaxValue.Value) { AddError(ErrorCode.BadPrecisionAndScale, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.BadPrecisionAndScale( precisionFacetDescription.MaxValue.Value, scaleFacetDescription.MaxValue.Value)); return false; } } return true; } private bool ValidateSufficientFacets() { PrimitiveType baseType = _primitiveType.BaseType as PrimitiveType; // the base type will be an edm type // the edm type is the athority for which facets are required if (baseType == null) { // an error will already have been added for this return false; } bool addedErrors = false; foreach (FacetDescription systemFacetDescription in baseType.FacetDescriptions) { FacetDescription providerFacetDescription = Helper.GetFacet(FacetDescriptions, systemFacetDescription.FacetName); if (providerFacetDescription == null) { AddError(ErrorCode.RequiredFacetMissing, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.MissingFacetDescription( PrimitiveType.Name, PrimitiveType.PrimitiveTypeKind, systemFacetDescription.FacetName)); addedErrors = true; } } return !addedErrors; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Data.Metadata.Edm; using System.Xml; using System.Data.Common; using System.Diagnostics; namespace System.Data.EntityModel.SchemaObjectModel { ////// Responsible for parsing Type ProviderManifest /// xml elements /// internal class TypeElement : SchemaType { PrimitiveType _primitiveType = new PrimitiveType(); List_facetDescriptions = new List (); public TypeElement(Schema parent) : base(parent) { _primitiveType.NamespaceName = Schema.Namespace; } protected override bool HandleElement(XmlReader reader) { if (base.HandleElement(reader)) { return true; } else if (CanHandleElement(reader, XmlConstants.FacetDescriptionsElement)) { SkipThroughElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.PrecisionElement)) { HandlePrecisionElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.ScaleElement)) { HandleScaleElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.MaxLengthElement)) { HandleMaxLengthElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.UnicodeElement)) { HandleUnicodeElement(reader); return true; } else if (CanHandleElement(reader, XmlConstants.FixedLengthElement)) { HandleFixedLengthElement(reader); return true; } return false; } protected override bool HandleAttribute(XmlReader reader) { if (base.HandleAttribute(reader)) { return true; } else if (CanHandleAttribute(reader, XmlConstants.PrimitiveTypeKindAttribute)) { HandlePrimitiveTypeKindAttribute(reader); return true; } return false; } ///////////////////////////////////////////////////////////////////// // Element Handlers /// /// Handler for the Precision element /// /// xml reader currently positioned at Precision element private void HandlePrecisionElement(XmlReader reader) { Debug.Assert(reader != null); ByteFacetDescriptionElement facetDescription = new ByteFacetDescriptionElement(this, DbProviderManifest.PrecisionFacetName); facetDescription.Parse(reader); // Bug 476451: Preventing decimal precision to be more than 29 since clr // decimal is capable of holding decimals upto 29 precision if ((this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Decimal) && (facetDescription.MaxValue > EdmProviderManifest.MaximumDecimalPrecision)) { AddError(ErrorCode.PrecisionMoreThanAllowedMax, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.PrecisionMoreThanAllowedMax(facetDescription.MaxValue, EdmProviderManifest.MaximumDecimalPrecision)); } else if (((this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.DateTime) || (this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.DateTimeOffset) || (this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Time)) && (facetDescription.MaxValue > EdmProviderManifest.MaximumDateTimePrecision)) { AddError(ErrorCode.PrecisionMoreThanAllowedMax, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.PrecisionMoreThanAllowedMax(facetDescription.MaxValue, EdmProviderManifest.MaximumDateTimePrecision)); } else { _facetDescriptions.Add(facetDescription); } } ////// Handler for the Scale element /// /// xml reader currently positioned at Scale element private void HandleScaleElement(XmlReader reader) { Debug.Assert(reader != null); ByteFacetDescriptionElement facetDescription = new ByteFacetDescriptionElement(this, DbProviderManifest.ScaleFacetName); facetDescription.Parse(reader); _facetDescriptions.Add(facetDescription); } ////// Handler for the MaxLength element /// /// xml reader currently positioned at MaxLength element private void HandleMaxLengthElement(XmlReader reader) { Debug.Assert(reader != null); IntegerFacetDescriptionElement facetDescription = new IntegerFacetDescriptionElement(this, DbProviderManifest.MaxLengthFacetName); facetDescription.Parse(reader); _facetDescriptions.Add(facetDescription); } ////// Handler for the Unicode element /// /// xml reader currently positioned at Unicode element private void HandleUnicodeElement(XmlReader reader) { Debug.Assert(reader != null); BooleanFacetDescriptionElement facetDescription = new BooleanFacetDescriptionElement(this, DbProviderManifest.UnicodeFacetName); facetDescription.Parse(reader); _facetDescriptions.Add(facetDescription); } ////// Handler for the FixedLength element /// /// xml reader currently positioned at FixedLength element private void HandleFixedLengthElement(XmlReader reader) { Debug.Assert(reader != null); BooleanFacetDescriptionElement facetDescription = new BooleanFacetDescriptionElement(this, DbProviderManifest.FixedLengthFacetName); facetDescription.Parse(reader); _facetDescriptions.Add(facetDescription); } ///////////////////////////////////////////////////////////////////// // Attribute Handlers ////// Handler for the PrimitiveTypeKind attribute /// /// xml reader currently positioned at Version attribute private void HandlePrimitiveTypeKindAttribute(XmlReader reader) { Debug.Assert(reader != null); string value = reader.Value; try { _primitiveType.PrimitiveTypeKind = (PrimitiveTypeKind)Enum.Parse(typeof(PrimitiveTypeKind), value); _primitiveType.BaseType = MetadataItem.EdmProviderManifest.GetPrimitiveType(_primitiveType.PrimitiveTypeKind); } catch (ArgumentException) { AddError(ErrorCode.InvalidPrimitiveTypeKind, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidPrimitiveTypeKind(value)); } } public override string Name { get { return _primitiveType.Name; } set { _primitiveType.Name = value; } } public PrimitiveType PrimitiveType { get { return _primitiveType; } } public IEnumerableFacetDescriptions { get { foreach (FacetDescriptionElement element in _facetDescriptions) { yield return element.FacetDescription; } } } internal override void ResolveTopLevelNames() { base.ResolveTopLevelNames(); // Call validate on the facet descriptions foreach (FacetDescriptionElement facetDescription in _facetDescriptions) { try { facetDescription.CreateAndValidateFacetDescription(this.Name); } catch (ArgumentException e) { AddError(ErrorCode.InvalidFacetInProviderManifest, EdmSchemaErrorSeverity.Error, e.Message); } } // facet descriptions don't have any names to resolve } internal override void Validate() { base.Validate(); if (!ValidateSufficientFacets()) { // the next checks will ---- up, so get out // if we had errors return; } if (!ValidateInterFacetConsistency()) { return; } } private bool ValidateInterFacetConsistency() { if (PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Decimal) { FacetDescription precisionFacetDescription = Helper.GetFacet(FacetDescriptions, EdmProviderManifest.PrecisionFacetName); FacetDescription scaleFacetDescription = Helper.GetFacet(FacetDescriptions, EdmProviderManifest.ScaleFacetName); if(precisionFacetDescription.MaxValue.Value < scaleFacetDescription.MaxValue.Value) { AddError(ErrorCode.BadPrecisionAndScale, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.BadPrecisionAndScale( precisionFacetDescription.MaxValue.Value, scaleFacetDescription.MaxValue.Value)); return false; } } return true; } private bool ValidateSufficientFacets() { PrimitiveType baseType = _primitiveType.BaseType as PrimitiveType; // the base type will be an edm type // the edm type is the athority for which facets are required if (baseType == null) { // an error will already have been added for this return false; } bool addedErrors = false; foreach (FacetDescription systemFacetDescription in baseType.FacetDescriptions) { FacetDescription providerFacetDescription = Helper.GetFacet(FacetDescriptions, systemFacetDescription.FacetName); if (providerFacetDescription == null) { AddError(ErrorCode.RequiredFacetMissing, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.MissingFacetDescription( PrimitiveType.Name, PrimitiveType.PrimitiveTypeKind, systemFacetDescription.FacetName)); addedErrors = true; } } return !addedErrors; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WorkflowDesignerMessageFilter.cs
- Win32SafeHandles.cs
- OrderPreservingMergeHelper.cs
- ObjectDataSourceDisposingEventArgs.cs
- OperatingSystem.cs
- ToolStripPanel.cs
- HtmlInputText.cs
- Directory.cs
- ClientApiGenerator.cs
- DrawingDrawingContext.cs
- WindowsTitleBar.cs
- Cursor.cs
- WebHeaderCollection.cs
- WorkflowRuntimeEndpoint.cs
- ChangesetResponse.cs
- OracleMonthSpan.cs
- ScriptControlManager.cs
- BindingSourceDesigner.cs
- GenericArgumentsUpdater.cs
- processwaithandle.cs
- SchemaLookupTable.cs
- GridViewDeletedEventArgs.cs
- CompatibleIComparer.cs
- WebScriptMetadataFormatter.cs
- PageContentCollection.cs
- EFColumnProvider.cs
- TagNameToTypeMapper.cs
- ZoneIdentityPermission.cs
- XPathEmptyIterator.cs
- xamlnodes.cs
- TabControlEvent.cs
- PaperSource.cs
- GroupBoxRenderer.cs
- AdPostCacheSubstitution.cs
- selecteditemcollection.cs
- XmlNullResolver.cs
- XamlSerializationHelper.cs
- SessionStateUtil.cs
- TimeSpanValidator.cs
- MarkupCompiler.cs
- SHA384.cs
- PlatformCulture.cs
- ElementsClipboardData.cs
- StringToken.cs
- BaseTransportHeaders.cs
- KeyedHashAlgorithm.cs
- Soap.cs
- EarlyBoundInfo.cs
- StructuralCache.cs
- UpDownBase.cs
- ExtensibleClassFactory.cs
- UTF8Encoding.cs
- DebugTracing.cs
- TextSearch.cs
- ProfileSection.cs
- SQLUtility.cs
- MatrixValueSerializer.cs
- SafeMemoryMappedViewHandle.cs
- CodeEntryPointMethod.cs
- PartitionResolver.cs
- SimpleHandlerBuildProvider.cs
- ICollection.cs
- ConfigXmlCDataSection.cs
- StorageAssociationTypeMapping.cs
- WindowsContainer.cs
- XmlUtf8RawTextWriter.cs
- M3DUtil.cs
- DropShadowEffect.cs
- Msmq3PoisonHandler.cs
- GACMembershipCondition.cs
- TextWriter.cs
- CodePrimitiveExpression.cs
- RoutedCommand.cs
- HMACRIPEMD160.cs
- MonitoringDescriptionAttribute.cs
- ResolveNameEventArgs.cs
- BitmapEffectGeneralTransform.cs
- StylusDownEventArgs.cs
- RecognizerInfo.cs
- RequestNavigateEventArgs.cs
- WinEventWrap.cs
- hwndwrapper.cs
- PropertyReferenceExtension.cs
- TriggerActionCollection.cs
- DateTimeOffset.cs
- TypeConverter.cs
- Viewport3DVisual.cs
- ExtentKey.cs
- Directory.cs
- ExpressionTable.cs
- DateRangeEvent.cs
- Bitmap.cs
- FloaterBaseParagraph.cs
- ClientCultureInfo.cs
- Size3DConverter.cs
- ConfigXmlDocument.cs
- HorizontalAlignConverter.cs
- odbcmetadatacolumnnames.cs
- FixedSOMLineCollection.cs
- precedingquery.cs