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
- OracleDataAdapter.cs
- EmissiveMaterial.cs
- RepeatButtonAutomationPeer.cs
- Attribute.cs
- _OverlappedAsyncResult.cs
- GeometryHitTestResult.cs
- SerializationFieldInfo.cs
- WebInvokeAttribute.cs
- DetailsViewDeleteEventArgs.cs
- Span.cs
- StylusPlugInCollection.cs
- EdgeModeValidation.cs
- MultiBindingExpression.cs
- RuleRef.cs
- XamlSerializer.cs
- DesignerSerializationOptionsAttribute.cs
- GridViewDesigner.cs
- ValidatorCollection.cs
- TableLayoutPanelResizeGlyph.cs
- CheckBoxDesigner.cs
- XmlSchemaElement.cs
- TextRunCacheImp.cs
- PasswordDeriveBytes.cs
- Rotation3DKeyFrameCollection.cs
- CodeTypeReference.cs
- ExternalCalls.cs
- UndoEngine.cs
- StylusEventArgs.cs
- Assert.cs
- Int32Converter.cs
- KerberosRequestorSecurityTokenAuthenticator.cs
- RoutingChannelExtension.cs
- RegistryPermission.cs
- ViewSimplifier.cs
- CacheMemory.cs
- CollectionDataContractAttribute.cs
- AssemblyLoader.cs
- CodeDomConfigurationHandler.cs
- ConfigUtil.cs
- MergeEnumerator.cs
- PeerUnsafeNativeCryptMethods.cs
- XmlTextWriter.cs
- ApplicationFileCodeDomTreeGenerator.cs
- NumberAction.cs
- DataGrid.cs
- PersonalizationAdministration.cs
- UserUseLicenseDictionaryLoader.cs
- QueryOperatorEnumerator.cs
- BufferAllocator.cs
- CompositionTarget.cs
- JsonFormatMapping.cs
- ThrowHelper.cs
- ColumnHeaderCollectionEditor.cs
- Compilation.cs
- XmlSchemaObject.cs
- AmbiguousMatchException.cs
- ServiceDescriptionSerializer.cs
- Misc.cs
- PointLight.cs
- BorderGapMaskConverter.cs
- ExpandableObjectConverter.cs
- TCPListener.cs
- MimeMapping.cs
- TextBox.cs
- NumberAction.cs
- WhitespaceRuleLookup.cs
- Helpers.cs
- StreamReader.cs
- PeerNameRegistration.cs
- ExpressionPrinter.cs
- IWorkflowDebuggerService.cs
- EtwTrackingParticipant.cs
- RequestSecurityTokenForGetBrowserToken.cs
- TableItemStyle.cs
- CodeTypeDeclarationCollection.cs
- LinkUtilities.cs
- InstanceBehavior.cs
- GenericAuthenticationEventArgs.cs
- TileBrush.cs
- HandlerBase.cs
- WmpBitmapDecoder.cs
- ServicesUtilities.cs
- GeneralTransform.cs
- HelloOperationCD1AsyncResult.cs
- SpStreamWrapper.cs
- FullTrustAssemblyCollection.cs
- ConfigurationManagerInternalFactory.cs
- SyndicationDeserializer.cs
- WindowProviderWrapper.cs
- DataReaderContainer.cs
- WmlLinkAdapter.cs
- AliasGenerator.cs
- RSACryptoServiceProvider.cs
- FixedSOMTableRow.cs
- CqlParser.cs
- IPAddressCollection.cs
- XmlSerializer.cs
- DescriptionAttribute.cs
- SR.cs
- XmlSerializationReader.cs