Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntityDesign / Design / System / Data / EntityModel / Emitters / AssociationTypeEmitter.cs / 1305376 / AssociationTypeEmitter.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.CodeDom; using System.Data; using System.Data.Metadata.Edm; using System.Data.EntityModel.SchemaObjectModel; using System.Diagnostics; namespace System.Data.EntityModel.Emitters { ////// Summary description for NestedTypeEmitter. /// internal sealed class AssociationTypeEmitter : SchemaTypeEmitter { public AssociationTypeEmitter(ClientApiGenerator generator, AssociationType associationType) : base(generator, associationType) { } public override CodeTypeDeclarationCollection EmitApiClass() { Debug.Assert(Item.AssociationEndMembers.Count == 2, "must have exactly two ends"); AssociationEndMember end1 = Item.AssociationEndMembers[0]; AssociationEndMember end2 = Item.AssociationEndMembers[1]; Generator.CompileUnit.AssemblyCustomAttributes.Add( AttributeEmitter.EmitSimpleAttribute( Utils.FQAdoFrameworkDataClassesName("EdmRelationshipAttribute"), Item.NamespaceName, //it is ok to use the c namespace because relationships aren't backed by clr objects Item.Name, end1.Name, GetMultiplicityCodeExpression(end1.RelationshipMultiplicity), GetEndTypeCodeExpression(end1), end2.Name, GetMultiplicityCodeExpression(end2.RelationshipMultiplicity), GetEndTypeCodeExpression(end2) )); // this method doesn't actually create a new type, just a new assembly level attribute for each end return new CodeTypeDeclarationCollection(); } private CodeTypeOfExpression GetEndTypeCodeExpression(AssociationEndMember end) { return new CodeTypeOfExpression(Generator.GetFullyQualifiedTypeReference(((RefType)end.TypeUsage.EdmType).ElementType)); } private CodeExpression GetMultiplicityCodeExpression(RelationshipMultiplicity multiplicity) { // example: // [System.Data.Objects.DataClasses.EdmRelationshipRoleAttribute("CustomerOrder", "Customer", global::System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(Customer))] string roleMultiplicity = multiplicity.ToString(); CodeExpression roleMultiplicityExpression = Emitter.EmitEnumMemberExpression( TypeReference.AdoFrameworkMetadataEdmType("RelationshipMultiplicity"), roleMultiplicity); return roleMultiplicityExpression; } internal new AssociationType Item { get { return base.Item as AssociationType; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.CodeDom; using System.Data; using System.Data.Metadata.Edm; using System.Data.EntityModel.SchemaObjectModel; using System.Diagnostics; namespace System.Data.EntityModel.Emitters { ////// Summary description for NestedTypeEmitter. /// internal sealed class AssociationTypeEmitter : SchemaTypeEmitter { public AssociationTypeEmitter(ClientApiGenerator generator, AssociationType associationType) : base(generator, associationType) { } public override CodeTypeDeclarationCollection EmitApiClass() { Debug.Assert(Item.AssociationEndMembers.Count == 2, "must have exactly two ends"); AssociationEndMember end1 = Item.AssociationEndMembers[0]; AssociationEndMember end2 = Item.AssociationEndMembers[1]; Generator.CompileUnit.AssemblyCustomAttributes.Add( AttributeEmitter.EmitSimpleAttribute( Utils.FQAdoFrameworkDataClassesName("EdmRelationshipAttribute"), Item.NamespaceName, //it is ok to use the c namespace because relationships aren't backed by clr objects Item.Name, end1.Name, GetMultiplicityCodeExpression(end1.RelationshipMultiplicity), GetEndTypeCodeExpression(end1), end2.Name, GetMultiplicityCodeExpression(end2.RelationshipMultiplicity), GetEndTypeCodeExpression(end2) )); // this method doesn't actually create a new type, just a new assembly level attribute for each end return new CodeTypeDeclarationCollection(); } private CodeTypeOfExpression GetEndTypeCodeExpression(AssociationEndMember end) { return new CodeTypeOfExpression(Generator.GetFullyQualifiedTypeReference(((RefType)end.TypeUsage.EdmType).ElementType)); } private CodeExpression GetMultiplicityCodeExpression(RelationshipMultiplicity multiplicity) { // example: // [System.Data.Objects.DataClasses.EdmRelationshipRoleAttribute("CustomerOrder", "Customer", global::System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(Customer))] string roleMultiplicity = multiplicity.ToString(); CodeExpression roleMultiplicityExpression = Emitter.EmitEnumMemberExpression( TypeReference.AdoFrameworkMetadataEdmType("RelationshipMultiplicity"), roleMultiplicity); return roleMultiplicityExpression; } internal new AssociationType Item { get { return base.Item as AssociationType; } } } } // 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
- SpeechUI.cs
- AutomationPeer.cs
- EntityDataSourceSelectingEventArgs.cs
- ProtocolsSection.cs
- DynamicPropertyHolder.cs
- SoapSchemaMember.cs
- TimeZoneInfo.cs
- PrinterResolution.cs
- DataServiceExpressionVisitor.cs
- EncodingDataItem.cs
- DataGridViewCellParsingEventArgs.cs
- VSWCFServiceContractGenerator.cs
- RootAction.cs
- PropagatorResult.cs
- WebPartCloseVerb.cs
- CompatibleComparer.cs
- PreProcessor.cs
- CompiledQueryCacheEntry.cs
- DesignerView.cs
- PersonalizableTypeEntry.cs
- DelayedRegex.cs
- WorkflowPrinting.cs
- XNodeValidator.cs
- Console.cs
- WebBrowser.cs
- JsonClassDataContract.cs
- PropertyDescriptorGridEntry.cs
- VirtualizingStackPanel.cs
- ListDesigner.cs
- EmbossBitmapEffect.cs
- SharedUtils.cs
- NoneExcludedImageIndexConverter.cs
- BevelBitmapEffect.cs
- CodeCompileUnit.cs
- TextEditorDragDrop.cs
- Double.cs
- StrokeCollection2.cs
- Hyperlink.cs
- EncodingInfo.cs
- ValueOfAction.cs
- COM2PropertyBuilderUITypeEditor.cs
- ShaperBuffers.cs
- DateTimeUtil.cs
- ConfigurationStrings.cs
- SerializationEventsCache.cs
- NaturalLanguageHyphenator.cs
- DecoderFallbackWithFailureFlag.cs
- PointCollection.cs
- PrinterSettings.cs
- PropVariant.cs
- COM2ComponentEditor.cs
- OleDbException.cs
- StreamingContext.cs
- SqlInternalConnectionTds.cs
- SerializationEventsCache.cs
- ZoneMembershipCondition.cs
- XmlIlTypeHelper.cs
- sqlcontext.cs
- InvokeGenerator.cs
- Permission.cs
- LabelAutomationPeer.cs
- Point.cs
- ListViewContainer.cs
- FileUtil.cs
- EnumerableValidator.cs
- CalendarItem.cs
- NamedObject.cs
- FormatConvertedBitmap.cs
- DbParameterCollection.cs
- EntityDataSourceState.cs
- TraceListeners.cs
- ConnectionManagementElement.cs
- cookiecollection.cs
- XmlUnspecifiedAttribute.cs
- CompoundFileDeflateTransform.cs
- PeerObject.cs
- StringCollectionMarkupSerializer.cs
- EventProxy.cs
- MatrixAnimationUsingKeyFrames.cs
- ChtmlTextWriter.cs
- FloaterBaseParagraph.cs
- UrlPath.cs
- VScrollBar.cs
- ScrollItemPatternIdentifiers.cs
- AppDomainGrammarProxy.cs
- Main.cs
- DoubleCollectionConverter.cs
- Hex.cs
- FixedDocument.cs
- SortExpressionBuilder.cs
- DockPanel.cs
- CodeDirectionExpression.cs
- MatrixCamera.cs
- SmtpTransport.cs
- UInt64Storage.cs
- XmlSchemaSimpleContentExtension.cs
- AuthenticationService.cs
- InlineUIContainer.cs
- RegexStringValidatorAttribute.cs
- ManifestResourceInfo.cs