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
- TargetParameterCountException.cs
- AssociationSetEnd.cs
- DiagnosticEventProvider.cs
- SettingsBindableAttribute.cs
- DataListAutoFormat.cs
- IQueryable.cs
- StringUtil.cs
- StringConverter.cs
- NTAccount.cs
- DashStyle.cs
- OleDbCommand.cs
- AddInEnvironment.cs
- ExpressionBuilderCollection.cs
- NotifyParentPropertyAttribute.cs
- SqlMetaData.cs
- Utils.cs
- Converter.cs
- Label.cs
- OracleDataAdapter.cs
- SplineKeyFrames.cs
- PeerInvitationResponse.cs
- SymmetricAlgorithm.cs
- ServerIdentity.cs
- GifBitmapDecoder.cs
- WindowInteropHelper.cs
- CommandSet.cs
- DataGridViewTopLeftHeaderCell.cs
- ReceiveMessageContent.cs
- FastEncoderStatics.cs
- MatrixTransform3D.cs
- HtmlInputReset.cs
- SystemSounds.cs
- FileRecordSequenceCompletedAsyncResult.cs
- WS2007FederationHttpBindingElement.cs
- TemplateAction.cs
- JsonFormatMapping.cs
- DomNameTable.cs
- ExpandSegmentCollection.cs
- DefaultPropertyAttribute.cs
- EntryPointNotFoundException.cs
- FragmentQuery.cs
- XmlBufferReader.cs
- NativeMethods.cs
- CodeAttributeDeclaration.cs
- PostBackTrigger.cs
- DesignSurfaceServiceContainer.cs
- ObjectDataSourceFilteringEventArgs.cs
- ClientScriptManager.cs
- Input.cs
- TimeoutHelper.cs
- LeaseManager.cs
- _ListenerResponseStream.cs
- TransformPatternIdentifiers.cs
- Context.cs
- GZipDecoder.cs
- WebReferenceOptions.cs
- VarRefManager.cs
- CalendarTable.cs
- ICspAsymmetricAlgorithm.cs
- StylusEditingBehavior.cs
- NameScopePropertyAttribute.cs
- RequestQueue.cs
- TaskHelper.cs
- DataControlFieldsEditor.cs
- SpeakProgressEventArgs.cs
- MenuBindingsEditor.cs
- ComEventsSink.cs
- PhysicalAddress.cs
- AttachedPropertyBrowsableAttribute.cs
- ThrowHelper.cs
- MiniLockedBorderGlyph.cs
- X509RawDataKeyIdentifierClause.cs
- FocusWithinProperty.cs
- IndependentAnimationStorage.cs
- XPathScanner.cs
- SchemeSettingElementCollection.cs
- SharedMemory.cs
- WebPartEditorOkVerb.cs
- ButtonFieldBase.cs
- OracleBinary.cs
- ButtonBaseAdapter.cs
- MemoryStream.cs
- SmtpMail.cs
- InlinedAggregationOperatorEnumerator.cs
- SubpageParaClient.cs
- ImagingCache.cs
- InitializingNewItemEventArgs.cs
- BindingCollection.cs
- RegexCompiler.cs
- ManagementEventArgs.cs
- DefaultAutoFieldGenerator.cs
- WebPartMovingEventArgs.cs
- EntityContainerEntitySetDefiningQuery.cs
- DataStorage.cs
- SQLInt64Storage.cs
- XmlIlVisitor.cs
- Matrix3DValueSerializer.cs
- HandlerBase.cs
- MtomMessageEncodingBindingElement.cs
- RotateTransform.cs