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 / EntityKeyElement.cs / 1 / EntityKeyElement.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Xml;
using System.Data;
using System.Data.Metadata.Edm;
using System.Data.Entity;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Represents an Key element in an EntityType element.
///
internal sealed class EntityKeyElement : SchemaElement
{
private List _keyProperties;
///
/// Constructs an EntityContainerAssociationSetEnd
///
/// Reference to the schema element.
public EntityKeyElement( SchemaEntityType parentElement )
: base( parentElement )
{
}
public IList KeyProperties
{
get
{
if (_keyProperties == null)
{
_keyProperties = new List();
}
return _keyProperties;
}
}
protected override bool HandleAttribute(XmlReader reader)
{
return false;
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.PropertyRef))
{
HandlePropertyRefElement(reader);
return true;
}
return false;
}
///
///
///
///
private void HandlePropertyRefElement(XmlReader reader)
{
PropertyRefElement property = new PropertyRefElement((SchemaEntityType)ParentElement);
property.Parse(reader);
this.KeyProperties.Add(property);
}
///
/// Used during the resolve phase to resolve the type name to the object that represents that type
///
internal override void ResolveTopLevelNames()
{
Debug.Assert(_keyProperties != null, "xsd should have verified that there should be atleast one property ref element");
foreach (PropertyRefElement property in _keyProperties)
{
if (!property.ResolveNames((SchemaEntityType)this.ParentElement))
{
AddError(ErrorCode.InvalidKey, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidKeyNoProperty(this.ParentElement.FQName, property.Name));
}
}
}
///
/// Validate all the key properties
///
internal override void Validate()
{
Debug.Assert(_keyProperties != null, "xsd should have verified that there should be atleast one property ref element");
Dictionary propertyLookUp = new Dictionary(StringComparer.Ordinal);
foreach (PropertyRefElement keyProperty in _keyProperties)
{
StructuredProperty property = keyProperty.Property;
Debug.Assert(property != null, "This should never be null, since if we were not able to resolve, we should have never reached to this point");
if (propertyLookUp.ContainsKey(property.Name))
{
AddError(ErrorCode.DuplicatePropertySpecifiedInEntityKey, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.DuplicatePropertyNameSpecifiedInEntityKey(this.ParentElement.FQName, property.Name));
continue;
}
propertyLookUp.Add(property.Name, keyProperty);
if (property.Nullable)
{
AddError(ErrorCode.InvalidKey, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidKeyNullablePart(property.Name, this.ParentElement.Name));
}
// currently we only support key properties of scalar type
if ((!(property.Type is ScalarType)) ||
(property.CollectionKind != CollectionKind.None))
{
AddError(ErrorCode.EntityKeyMustBeScalar,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.EntityKeyMustBeScalar(property.Name, this.ParentElement.Name));
continue;
}
Debug.Assert(property.TypeUsage != null, "For scalar type, typeusage must be initialized");
// Bug 484200: Binary type key properties are currently not supported.
PrimitiveTypeKind kind = ((PrimitiveType)property.TypeUsage.EdmType).PrimitiveTypeKind;
if (!Helper.IsValidKeyType(kind))
{
if (Schema.DataModel == SchemaDataModelOption.EntityDataModel)
{
AddError(ErrorCode.BinaryEntityKeyCurrentlyNotSupported,
EdmSchemaErrorSeverity.Error,
Strings.EntityKeyTypeCurrentlyNotSupported(property.Name, this.ParentElement.FQName, kind));
}
else
{
Debug.Assert(SchemaDataModelOption.ProviderDataModel == Schema.DataModel, "Invalid DataModel encountered");
AddError(ErrorCode.BinaryEntityKeyCurrentlyNotSupported,
EdmSchemaErrorSeverity.Error,
Strings.EntityKeyTypeCurrentlyNotSupportedInSSDL(property.Name, this.ParentElement.FQName,
property.TypeUsage.EdmType.Name, property.TypeUsage.EdmType.BaseType.FullName, kind));
}
}
}
}
}
}
// 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;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Xml;
using System.Data;
using System.Data.Metadata.Edm;
using System.Data.Entity;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Represents an Key element in an EntityType element.
///
internal sealed class EntityKeyElement : SchemaElement
{
private List _keyProperties;
///
/// Constructs an EntityContainerAssociationSetEnd
///
/// Reference to the schema element.
public EntityKeyElement( SchemaEntityType parentElement )
: base( parentElement )
{
}
public IList KeyProperties
{
get
{
if (_keyProperties == null)
{
_keyProperties = new List();
}
return _keyProperties;
}
}
protected override bool HandleAttribute(XmlReader reader)
{
return false;
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.PropertyRef))
{
HandlePropertyRefElement(reader);
return true;
}
return false;
}
///
///
///
///
private void HandlePropertyRefElement(XmlReader reader)
{
PropertyRefElement property = new PropertyRefElement((SchemaEntityType)ParentElement);
property.Parse(reader);
this.KeyProperties.Add(property);
}
///
/// Used during the resolve phase to resolve the type name to the object that represents that type
///
internal override void ResolveTopLevelNames()
{
Debug.Assert(_keyProperties != null, "xsd should have verified that there should be atleast one property ref element");
foreach (PropertyRefElement property in _keyProperties)
{
if (!property.ResolveNames((SchemaEntityType)this.ParentElement))
{
AddError(ErrorCode.InvalidKey, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidKeyNoProperty(this.ParentElement.FQName, property.Name));
}
}
}
///
/// Validate all the key properties
///
internal override void Validate()
{
Debug.Assert(_keyProperties != null, "xsd should have verified that there should be atleast one property ref element");
Dictionary propertyLookUp = new Dictionary(StringComparer.Ordinal);
foreach (PropertyRefElement keyProperty in _keyProperties)
{
StructuredProperty property = keyProperty.Property;
Debug.Assert(property != null, "This should never be null, since if we were not able to resolve, we should have never reached to this point");
if (propertyLookUp.ContainsKey(property.Name))
{
AddError(ErrorCode.DuplicatePropertySpecifiedInEntityKey, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.DuplicatePropertyNameSpecifiedInEntityKey(this.ParentElement.FQName, property.Name));
continue;
}
propertyLookUp.Add(property.Name, keyProperty);
if (property.Nullable)
{
AddError(ErrorCode.InvalidKey, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidKeyNullablePart(property.Name, this.ParentElement.Name));
}
// currently we only support key properties of scalar type
if ((!(property.Type is ScalarType)) ||
(property.CollectionKind != CollectionKind.None))
{
AddError(ErrorCode.EntityKeyMustBeScalar,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.EntityKeyMustBeScalar(property.Name, this.ParentElement.Name));
continue;
}
Debug.Assert(property.TypeUsage != null, "For scalar type, typeusage must be initialized");
// Bug 484200: Binary type key properties are currently not supported.
PrimitiveTypeKind kind = ((PrimitiveType)property.TypeUsage.EdmType).PrimitiveTypeKind;
if (!Helper.IsValidKeyType(kind))
{
if (Schema.DataModel == SchemaDataModelOption.EntityDataModel)
{
AddError(ErrorCode.BinaryEntityKeyCurrentlyNotSupported,
EdmSchemaErrorSeverity.Error,
Strings.EntityKeyTypeCurrentlyNotSupported(property.Name, this.ParentElement.FQName, kind));
}
else
{
Debug.Assert(SchemaDataModelOption.ProviderDataModel == Schema.DataModel, "Invalid DataModel encountered");
AddError(ErrorCode.BinaryEntityKeyCurrentlyNotSupported,
EdmSchemaErrorSeverity.Error,
Strings.EntityKeyTypeCurrentlyNotSupportedInSSDL(property.Name, this.ParentElement.FQName,
property.TypeUsage.EdmType.Name, property.TypeUsage.EdmType.BaseType.FullName, kind));
}
}
}
}
}
}
// 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
- SearchForVirtualItemEventArgs.cs
- MailWriter.cs
- PageThemeBuildProvider.cs
- WorkItem.cs
- TaskFileService.cs
- SvcMapFileSerializer.cs
- ParserOptions.cs
- StrokeCollectionDefaultValueFactory.cs
- AsyncSerializedWorker.cs
- webclient.cs
- WindowInteropHelper.cs
- ToolStripSplitButton.cs
- CacheEntry.cs
- PeerObject.cs
- CqlIdentifiers.cs
- Array.cs
- SplineKeyFrames.cs
- WorkflowRuntimeServiceElement.cs
- VariableQuery.cs
- HtmlTableCellCollection.cs
- MultiDataTrigger.cs
- Vector3DCollection.cs
- CaseInsensitiveComparer.cs
- Solver.cs
- TextDecorationCollection.cs
- HwndStylusInputProvider.cs
- CngProperty.cs
- ObjectTokenCategory.cs
- _NegoState.cs
- AttachmentService.cs
- ByteKeyFrameCollection.cs
- DesignerAdRotatorAdapter.cs
- XmlDigitalSignatureProcessor.cs
- BuildProviderCollection.cs
- LinqDataSourceValidationException.cs
- AsyncOperationManager.cs
- TypeRefElement.cs
- FormsAuthenticationModule.cs
- PropertyItem.cs
- AssemblyUtil.cs
- Point3DValueSerializer.cs
- PropertyPushdownHelper.cs
- Native.cs
- NullRuntimeConfig.cs
- PassportIdentity.cs
- BitmapMetadataEnumerator.cs
- FileDialogCustomPlace.cs
- BrushValueSerializer.cs
- DataGridViewRowHeaderCell.cs
- EmptyReadOnlyDictionaryInternal.cs
- SctClaimSerializer.cs
- BindableAttribute.cs
- FactoryId.cs
- DataGridViewColumn.cs
- HtmlMeta.cs
- _NTAuthentication.cs
- ListDictionary.cs
- ChangeConflicts.cs
- DesignerSerializerAttribute.cs
- _SslState.cs
- Component.cs
- KeyManager.cs
- Debug.cs
- SchemaObjectWriter.cs
- HasCopySemanticsAttribute.cs
- SqlReferenceCollection.cs
- TreeNodeCollectionEditor.cs
- WebPartHelpVerb.cs
- FixedTextContainer.cs
- SafeRegistryHandle.cs
- DesignerEventService.cs
- BufferedWebEventProvider.cs
- WmlPanelAdapter.cs
- Point3DKeyFrameCollection.cs
- PersistenceIOParticipant.cs
- OutputCacheModule.cs
- DomainUpDown.cs
- CurrencyWrapper.cs
- securitymgrsite.cs
- TrustLevelCollection.cs
- ProcessModelInfo.cs
- mediaeventargs.cs
- MasterPageBuildProvider.cs
- StringAnimationBase.cs
- ControlParameter.cs
- FullTrustAssembly.cs
- DetailsViewPagerRow.cs
- EventWaitHandle.cs
- URLAttribute.cs
- AnimationClockResource.cs
- PageCanvasSize.cs
- AmbiguousMatchException.cs
- QueryHandler.cs
- StrokeFIndices.cs
- XmlSchemaComplexContentExtension.cs
- RotateTransform.cs
- ClickablePoint.cs
- CodeTypeDelegate.cs
- ArgumentNullException.cs
- Visual.cs