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
- ReachPageContentCollectionSerializerAsync.cs
- OleDbCommandBuilder.cs
- MergeFailedEvent.cs
- EntityParameter.cs
- SoapIgnoreAttribute.cs
- HttpListenerRequest.cs
- UDPClient.cs
- PermissionAttributes.cs
- SqlCharStream.cs
- SqlUtils.cs
- ExpressionLink.cs
- X509SecurityTokenProvider.cs
- SR.cs
- OleServicesContext.cs
- TimelineGroup.cs
- WebPartCatalogAddVerb.cs
- ObjectSecurity.cs
- ExpressionEditorAttribute.cs
- JournalNavigationScope.cs
- BrowserDefinitionCollection.cs
- ObjectListDesigner.cs
- QueryComponents.cs
- CorrelationHandle.cs
- RunClient.cs
- StringBuilder.cs
- XmlILStorageConverter.cs
- SynchronizedInputAdaptor.cs
- MarshalByValueComponent.cs
- DataGridViewImageColumn.cs
- HttpPostedFileBase.cs
- HwndKeyboardInputProvider.cs
- httpapplicationstate.cs
- OdbcException.cs
- InfoCardBaseException.cs
- DocumentViewerHelper.cs
- CodeDirectiveCollection.cs
- MatrixValueSerializer.cs
- SplitContainerDesigner.cs
- ActivityDesigner.cs
- XmlSchemaObjectCollection.cs
- ReturnEventArgs.cs
- Msec.cs
- ACE.cs
- XmlCountingReader.cs
- QueryContinueDragEventArgs.cs
- _NetRes.cs
- ConfigurationLocation.cs
- HtmlEmptyTagControlBuilder.cs
- TransactionWaitAsyncResult.cs
- ButtonChrome.cs
- AlphabetConverter.cs
- TypeSystem.cs
- ControlParameter.cs
- MultiBinding.cs
- COM2ComponentEditor.cs
- DesignTimeValidationFeature.cs
- MemoryFailPoint.cs
- DropSource.cs
- ApplicationHost.cs
- PolygonHotSpot.cs
- RegistrySecurity.cs
- OdbcDataReader.cs
- _ChunkParse.cs
- ListBindingConverter.cs
- HtmlEncodedRawTextWriter.cs
- FrameAutomationPeer.cs
- EntityClassGenerator.cs
- XmlSerializationGeneratedCode.cs
- ServerIdentity.cs
- TypedElement.cs
- ExternalException.cs
- EntityDataReader.cs
- SafeRightsManagementPubHandle.cs
- DesignTimeType.cs
- DrawListViewItemEventArgs.cs
- OAVariantLib.cs
- NameGenerator.cs
- DefaultPropertyAttribute.cs
- ItemsControl.cs
- RoleManagerSection.cs
- FamilyTypefaceCollection.cs
- ElementFactory.cs
- FixedSOMSemanticBox.cs
- HttpListenerRequest.cs
- IHttpResponseInternal.cs
- DrawingGroup.cs
- CaseStatement.cs
- IOThreadTimer.cs
- Grammar.cs
- Metafile.cs
- BooleanExpr.cs
- SqlWorkflowPersistenceService.cs
- Input.cs
- DispatcherTimer.cs
- DebugView.cs
- FileSystemInfo.cs
- ExceptQueryOperator.cs
- Internal.cs
- RsaKeyIdentifierClause.cs
- __ConsoleStream.cs