Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntityDesign / Design / System / Data / EntityModel / Emitters / PropertyEmitterBase.cs / 1305376 / PropertyEmitterBase.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Data.Metadata.Edm;
using System.Diagnostics;
using System.Data.Entity.Design.SsdlGenerator;
using System.Data.Entity.Design.Common;
namespace System.Data.EntityModel.Emitters
{
internal abstract class PropertyEmitterBase : MetadataItemEmitter
{
private bool _declaringTypeUsesStandardBaseType;
protected PropertyEmitterBase(ClientApiGenerator generator, MetadataItem item, bool declaringTypeUsesStandardBaseType)
:base(generator, item)
{
Debug.Assert(item != null, "item is null");
_declaringTypeUsesStandardBaseType = declaringTypeUsesStandardBaseType;
}
///
/// This is where the derived classes supply their emit logic.
///
/// The CodeDom representation of the type that the property is being added to.
protected abstract void EmitProperty(CodeTypeDeclaration typeDecl);
///
/// Validation logic specific to property emitters
///
protected override void Validate()
{
VerifyGetterAndSetterAccessibilityCompatability();
Generator.VerifyLanguageCaseSensitiveCompatibilityForProperty(Item as EdmMember);
}
///
/// The compiler ensures accessibility on a Setter/Getter is more restrictive than on the Property.
/// However accessibility modifiers are not well ordered. Internal and Protected don't go well together
/// because neither is more restrictive than others.
///
private void VerifyGetterAndSetterAccessibilityCompatability()
{
if (PropertyEmitter.GetGetterAccessibility(Item) == MemberAttributes.Assembly
&& PropertyEmitter.GetSetterAccessibility(Item) == MemberAttributes.Family)
{
Generator.AddError(System.Data.Entity.Design.Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Internal", "Protected"),
ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict,
EdmSchemaErrorSeverity.Error, Item.DeclaringType.FullName, Item.Name);
}
else if (PropertyEmitter.GetGetterAccessibility(Item) == MemberAttributes.Family
&& PropertyEmitter.GetSetterAccessibility(Item) == MemberAttributes.Assembly)
{
Generator.AddError(System.Data.Entity.Design.Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Protected", "Internal"),
ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict,
EdmSchemaErrorSeverity.Error, Item.DeclaringType.FullName, Item.Name);
}
}
///
/// Main method for Emitting property code.
///
/// The CodeDom representation of the type that the property is being added to.
public void Emit(CodeTypeDeclaration typeDecl)
{
Validate();
EmitProperty(typeDecl);
}
protected bool AncestorClassDefinesName(string name)
{
if (_declaringTypeUsesStandardBaseType && Utils.DoesTypeReserveMemberName(Item.DeclaringType, name, Generator.LanguageAppropriateStringComparer))
{
return true;
}
StructuralType baseType = Item.DeclaringType.BaseType as StructuralType;
if (baseType != null && baseType.Members.Contains(name))
{
return true;
}
return false;
}
public new EdmMember Item
{
get
{
return base.Item as EdmMember;
}
}
}
}
// 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
- DynamicDocumentPaginator.cs
- CodeTypeDeclaration.cs
- ControlBuilder.cs
- DataGridCellsPresenter.cs
- PingReply.cs
- XmlDomTextWriter.cs
- SecurityRuntime.cs
- DynamicPropertyHolder.cs
- AesManaged.cs
- WaveHeader.cs
- Path.cs
- DataGridViewColumnTypePicker.cs
- DataGridViewRowPrePaintEventArgs.cs
- IteratorFilter.cs
- DependencyPropertyChangedEventArgs.cs
- OdbcConnectionHandle.cs
- TextServicesProperty.cs
- NumberEdit.cs
- AssemblyResourceLoader.cs
- Line.cs
- ApplicationActivator.cs
- ForEachAction.cs
- ConfigurationPropertyCollection.cs
- AuthenticationManager.cs
- StagingAreaInputItem.cs
- UnsafeNativeMethods.cs
- XmlTextEncoder.cs
- ResourceDescriptionAttribute.cs
- ComNativeDescriptor.cs
- ListControlDesigner.cs
- ServiceChannelProxy.cs
- ExtensionDataReader.cs
- MouseGesture.cs
- Viewport2DVisual3D.cs
- LinqDataSourceDeleteEventArgs.cs
- DBDataPermissionAttribute.cs
- StorageEntityContainerMapping.cs
- ConfigurationValues.cs
- GridErrorDlg.cs
- DynamicValidatorEventArgs.cs
- AssemblyAttributes.cs
- IntegerValidatorAttribute.cs
- OracleDateTime.cs
- InheritanceAttribute.cs
- ListChangedEventArgs.cs
- TableItemProviderWrapper.cs
- SessionStateUtil.cs
- TrackingMemoryStream.cs
- PageHandlerFactory.cs
- _AutoWebProxyScriptEngine.cs
- AnonymousIdentificationSection.cs
- VScrollProperties.cs
- ActionFrame.cs
- _CommandStream.cs
- AutoCompleteStringCollection.cs
- ProcessHostServerConfig.cs
- FileChangesMonitor.cs
- DataGridViewSelectedRowCollection.cs
- QuadraticBezierSegment.cs
- TrustLevelCollection.cs
- PointAnimationBase.cs
- SqlTransaction.cs
- ModelPropertyCollectionImpl.cs
- Model3D.cs
- GacUtil.cs
- XamlSerializerUtil.cs
- XmlSerializerSection.cs
- ParagraphResult.cs
- IResourceProvider.cs
- TripleDESCryptoServiceProvider.cs
- IncrementalCompileAnalyzer.cs
- ListViewDesigner.cs
- ValueQuery.cs
- PerformanceCounterNameAttribute.cs
- XmlCharType.cs
- QueryCursorEventArgs.cs
- ImpersonationContext.cs
- GridViewItemAutomationPeer.cs
- XmlText.cs
- MemberMaps.cs
- MediaCommands.cs
- SqlCacheDependency.cs
- PermissionSet.cs
- ErrorEventArgs.cs
- PowerEase.cs
- LoadRetryAsyncResult.cs
- ResourceSet.cs
- DeploymentExceptionMapper.cs
- GlobalizationAssembly.cs
- RowsCopiedEventArgs.cs
- FontConverter.cs
- Repeater.cs
- DataStreamFromComStream.cs
- ISAPIWorkerRequest.cs
- ElasticEase.cs
- JsonQNameDataContract.cs
- ToolBarOverflowPanel.cs
- DeviceSpecificDialogCachedState.cs
- WasHttpModulesInstallComponent.cs
- DataObjectAttribute.cs