Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntityDesign / Design / System / Data / EntityModel / Emitters / AssociationTypeEmitter.cs / 1 / 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
- EndOfStreamException.cs
- DefaultAuthorizationContext.cs
- RelatedCurrencyManager.cs
- Condition.cs
- StructureChangedEventArgs.cs
- IsolatedStorageFile.cs
- UncommonField.cs
- JoinSymbol.cs
- RsaSecurityKey.cs
- SchemaImporterExtensionElementCollection.cs
- FormViewDeleteEventArgs.cs
- XmlDataSource.cs
- AllMembershipCondition.cs
- SecureUICommand.cs
- ColorConvertedBitmap.cs
- FormatConvertedBitmap.cs
- Variant.cs
- EntityProviderServices.cs
- WhitespaceReader.cs
- Schema.cs
- ValueExpressions.cs
- OverflowException.cs
- DependencyPropertyDescriptor.cs
- CatalogPart.cs
- StructuralCache.cs
- Effect.cs
- Input.cs
- TemplateColumn.cs
- StyleSheetRefUrlEditor.cs
- BaseProcessor.cs
- BookmarkResumptionRecord.cs
- InheritanceUI.cs
- ColumnWidthChangingEvent.cs
- ClientTargetCollection.cs
- IteratorFilter.cs
- ServiceHttpModule.cs
- RenderingEventArgs.cs
- FieldNameLookup.cs
- ArraySubsetEnumerator.cs
- GestureRecognitionResult.cs
- MimeParameterWriter.cs
- ISFTagAndGuidCache.cs
- DataControlPagerLinkButton.cs
- HtmlTableCellCollection.cs
- CorePropertiesFilter.cs
- RolePrincipal.cs
- WindowsPen.cs
- CodeDomLocalizationProvider.cs
- SynchronizationFilter.cs
- VideoDrawing.cs
- AQNBuilder.cs
- Transform3DCollection.cs
- odbcmetadatacollectionnames.cs
- XmlUtilWriter.cs
- MemberRestriction.cs
- ContentTextAutomationPeer.cs
- SchemaComplexType.cs
- SecureStringHasher.cs
- Rights.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- InitializationEventAttribute.cs
- DataGridViewRowEventArgs.cs
- KeyGesture.cs
- PageParserFilter.cs
- NavigateEvent.cs
- WasNotInstalledException.cs
- Page.cs
- TypeValidationEventArgs.cs
- DocumentSequenceHighlightLayer.cs
- TextureBrush.cs
- SoapExtensionReflector.cs
- GenericWebPart.cs
- PeerCustomResolverElement.cs
- __Filters.cs
- EntityProviderFactory.cs
- mediapermission.cs
- ErrorTableItemStyle.cs
- HostedImpersonationContext.cs
- JavaScriptString.cs
- TransformerConfigurationWizardBase.cs
- ColorConverter.cs
- Solver.cs
- ReferencedCollectionType.cs
- TriggerAction.cs
- CollectionViewProxy.cs
- AnnotationStore.cs
- ConnectionOrientedTransportChannelFactory.cs
- PipeException.cs
- TextSpan.cs
- SymbolType.cs
- FontWeights.cs
- WindowsListViewGroup.cs
- MemberDescriptor.cs
- RouteData.cs
- EntitySetBaseCollection.cs
- LicFileLicenseProvider.cs
- TypedTableBaseExtensions.cs
- BufferedGraphicsManager.cs
- QilXmlWriter.cs
- DataSourceView.cs