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
- DbConnectionPoolOptions.cs
- HebrewNumber.cs
- GuidConverter.cs
- FrameworkElementFactory.cs
- PreviewControlDesigner.cs
- EditorPart.cs
- Activity.cs
- DateTimeFormatInfo.cs
- StrongNamePublicKeyBlob.cs
- EntityDataSourceContextDisposingEventArgs.cs
- ReferencedCategoriesDocument.cs
- XsdBuilder.cs
- xsdvalidator.cs
- ELinqQueryState.cs
- DataFormats.cs
- ThreadInterruptedException.cs
- NamespaceQuery.cs
- GridViewCancelEditEventArgs.cs
- OptionUsage.cs
- TriState.cs
- CombinedGeometry.cs
- DataException.cs
- WebPartExportVerb.cs
- AsynchronousChannel.cs
- OracleConnectionStringBuilder.cs
- BufferModesCollection.cs
- Sequence.cs
- GenericAuthenticationEventArgs.cs
- DataTemplateSelector.cs
- ThreadExceptionDialog.cs
- ListViewGroup.cs
- CodeAttachEventStatement.cs
- MenuItemStyle.cs
- ConnectorSelectionGlyph.cs
- Dynamic.cs
- StickyNoteAnnotations.cs
- KeyValuePairs.cs
- ImportOptions.cs
- CellNormalizer.cs
- GraphicsPath.cs
- QilExpression.cs
- FlowDocument.cs
- EpmSourceTree.cs
- DataServiceHost.cs
- Internal.cs
- TransactionInformation.cs
- SqlConnectionFactory.cs
- XmlILStorageConverter.cs
- Transform.cs
- SimpleBitVector32.cs
- relpropertyhelper.cs
- XmlResolver.cs
- SoapMessage.cs
- BrowserDefinitionCollection.cs
- DocumentViewerHelper.cs
- LinqDataSourceUpdateEventArgs.cs
- DocumentCollection.cs
- PageCanvasSize.cs
- TextHidden.cs
- BufferBuilder.cs
- DesignerCalendarAdapter.cs
- InvalidateEvent.cs
- PathFigureCollectionConverter.cs
- OracleConnectionString.cs
- ConfigXmlComment.cs
- TrackBar.cs
- StreamingContext.cs
- XmlNodeReader.cs
- HttpHandlerAction.cs
- ArraySet.cs
- XsltArgumentList.cs
- SystemColorTracker.cs
- CodeDOMProvider.cs
- EdmConstants.cs
- ClientRolePrincipal.cs
- Evaluator.cs
- DispatcherProcessingDisabled.cs
- TableChangeProcessor.cs
- RectKeyFrameCollection.cs
- xmlsaver.cs
- Stroke2.cs
- ModelTreeEnumerator.cs
- SafeEventLogWriteHandle.cs
- RenameRuleObjectDialog.Designer.cs
- ToggleProviderWrapper.cs
- FormsAuthenticationUser.cs
- ClientType.cs
- ClientUtils.cs
- SelectionItemPattern.cs
- SingleObjectCollection.cs
- TopClause.cs
- SecurityDocument.cs
- FillRuleValidation.cs
- DelegatingTypeDescriptionProvider.cs
- GenericUriParser.cs
- PeerApplication.cs
- DataControlImageButton.cs
- PageWrapper.cs
- WindowsGraphicsWrapper.cs
- MenuItemStyle.cs