Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / ItemType.cs / 1305376 / ItemType.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Data;
using System.Diagnostics;
using metadata = System.Data.Metadata.Edm;
using System.Data.Metadata.Edm;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Summary description for Item.
///
[System.Diagnostics.DebuggerDisplay("Name={Name}, BaseType={BaseType.FQName}, HasKeys={HasKeys}")]
internal sealed class SchemaEntityType : StructuredType
{
#region Private Fields
private const char KEY_DELIMITER = ' ';
private ISchemaElementLookUpTable _navigationProperties = null;
private EntityKeyElement _keyElement = null;
private static List EmptyKeyProperties = new List(0);
#endregion
#region Public Methods
///
///
///
///
public SchemaEntityType(Schema parentElement)
: base(parentElement)
{
if (Schema.DataModel == SchemaDataModelOption.EntityDataModel)
OtherContent.Add(Schema.SchemaSource);
}
#endregion
#region Protected Methods
///
///
///
internal override void ResolveTopLevelNames()
{
base.ResolveTopLevelNames();
if (BaseType != null)
{
if (!(BaseType is SchemaEntityType))
{
AddError(ErrorCode.InvalidBaseType, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidBaseTypeForItemType(BaseType.FQName, FQName));
}
// Since the base type is not null, key must be defined on the base type
else if (_keyElement != null && BaseType != null)
{
AddError(ErrorCode.InvalidKey, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidKeyKeyDefinedInBaseClass(FQName, BaseType.FQName));
}
}
// If the base type is not null, then the key must be defined on the base entity type, since
// we don't allow entity type without keys.
else if (_keyElement == null)
{
AddError(ErrorCode.KeyMissingOnEntityType, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.KeyMissingOnEntityType(this.FQName));
}
else if (null == BaseType && null != UnresolvedBaseType)
{
// this is already an error situation, we won't do any resolve name further in this type
return;
}
else
{
_keyElement.ResolveTopLevelNames();
}
}
#endregion
#region Protected Properties
protected override bool HandleAttribute(XmlReader reader)
{
if (base.HandleAttribute(reader))
{
return true;
}
return false;
}
#endregion
#region Private Methods
#endregion
#region Public Properties
public EntityKeyElement KeyElement
{
get
{
return _keyElement;
}
}
///
///
///
public IList DeclaredKeyProperties
{
get
{
if (KeyElement == null)
{
return EmptyKeyProperties;
}
return KeyElement.KeyProperties;
}
}
///
///
///
///
public IList KeyProperties
{
get
{
if (KeyElement == null)
{
if (BaseType != null)
{
System.Diagnostics.Debug.Assert(BaseType is SchemaEntityType, "ItemType.BaseType is not ItemType");
return (BaseType as SchemaEntityType).KeyProperties;
}
return EmptyKeyProperties;
}
return this.KeyElement.KeyProperties;
}
}
///
///
///
public ISchemaElementLookUpTable NavigationProperties
{
get
{
if (_navigationProperties == null)
{
_navigationProperties = new FilteredSchemaElementLookUpTable(NamedMembers);
}
return _navigationProperties;
}
}
#endregion
#region Protected Methods
///
///
///
internal override void Validate()
{
// structured type base class will validate all members (properties, nav props, etc)
base.Validate();
if (this.KeyElement != null)
{
this.KeyElement.Validate();
}
}
#endregion
#region Protected Properties
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.Key))
{
HandleKeyElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.NavigationProperty))
{
HandleNavigationPropertyElement(reader);
return true;
}
return false;
}
#endregion
#region Private Methods
///
///
///
///
private void HandleNavigationPropertyElement(XmlReader reader)
{
NavigationProperty navigationProperty = new NavigationProperty(this);
navigationProperty.Parse(reader);
AddMember(navigationProperty);
}
///
///
///
///
private void HandleKeyElement(XmlReader reader)
{
_keyElement = new EntityKeyElement(this);
_keyElement.Parse(reader);
}
#endregion
}
}
// 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
- X509Extension.cs
- PageContent.cs
- ErasingStroke.cs
- InlinedLocationReference.cs
- BinarySerializer.cs
- ListViewItemCollectionEditor.cs
- String.cs
- _ListenerRequestStream.cs
- HtmlElementEventArgs.cs
- RawKeyboardInputReport.cs
- DataControlField.cs
- QueryReaderSettings.cs
- ConfigXmlAttribute.cs
- SoapReflectionImporter.cs
- ToolStripPanel.cs
- ToolStripGrip.cs
- CodeDelegateInvokeExpression.cs
- XmlDomTextWriter.cs
- ResourcesBuildProvider.cs
- _RequestCacheProtocol.cs
- SqlTypesSchemaImporter.cs
- FrameworkContextData.cs
- DataStorage.cs
- EntityClientCacheKey.cs
- RegexWriter.cs
- HashAlgorithm.cs
- HeaderedItemsControl.cs
- PageAsyncTask.cs
- XmlFormatReaderGenerator.cs
- PageAdapter.cs
- HtmlTitle.cs
- ReflectionUtil.cs
- LingerOption.cs
- TextBox.cs
- TraceEventCache.cs
- EntitySetBaseCollection.cs
- Persist.cs
- ErrorTableItemStyle.cs
- XmlSchemaException.cs
- SoapAttributeOverrides.cs
- HostProtectionException.cs
- DataBindingHandlerAttribute.cs
- WindowManager.cs
- SqlUdtInfo.cs
- RemoteArgument.cs
- WebResponse.cs
- AutomationPropertyInfo.cs
- AppModelKnownContentFactory.cs
- WasEndpointConfigContainer.cs
- TreeWalkHelper.cs
- AutomationPropertyInfo.cs
- EntityDataSourceContextCreatedEventArgs.cs
- DropDownList.cs
- RegisteredDisposeScript.cs
- RsaSecurityKey.cs
- ParseNumbers.cs
- webbrowsersite.cs
- TrimSurroundingWhitespaceAttribute.cs
- FormatterServices.cs
- webproxy.cs
- ReadOnlyActivityGlyph.cs
- SqlTrackingWorkflowInstance.cs
- selecteditemcollection.cs
- XmlAttributeAttribute.cs
- WebControl.cs
- TreeNodeStyleCollection.cs
- MultipleCopiesCollection.cs
- DataDocumentXPathNavigator.cs
- Page.cs
- ReferentialConstraint.cs
- ClientUrlResolverWrapper.cs
- DBSchemaTable.cs
- TextEndOfLine.cs
- Int16Storage.cs
- AnnotationResourceCollection.cs
- TableLayoutSettingsTypeConverter.cs
- ChainOfDependencies.cs
- Maps.cs
- GregorianCalendar.cs
- EncodingInfo.cs
- DefaultValueAttribute.cs
- DateTimeHelper.cs
- DataDocumentXPathNavigator.cs
- HighlightComponent.cs
- CompoundFileStorageReference.cs
- SQLSingleStorage.cs
- RemotingAttributes.cs
- Domain.cs
- X509Certificate.cs
- ProxyGenerator.cs
- ConfigXmlComment.cs
- ContentValidator.cs
- itemelement.cs
- FlowLayoutPanel.cs
- BitSet.cs
- DataColumnMappingCollection.cs
- FacetChecker.cs
- SoapInteropTypes.cs
- SupportingTokenParameters.cs
- NTAccount.cs