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
- XmlCharacterData.cs
- ResourceManager.cs
- PageCatalogPart.cs
- LineServices.cs
- SynchronousChannel.cs
- ActiveXHelper.cs
- followingquery.cs
- BeginSelectCardRequest.cs
- ValueProviderWrapper.cs
- GenericAuthenticationEventArgs.cs
- XmlReader.cs
- IItemContainerGenerator.cs
- XmlElementAttributes.cs
- activationcontext.cs
- MetadataProperty.cs
- Parameter.cs
- SiteOfOriginPart.cs
- keycontainerpermission.cs
- DataGridViewCellStyle.cs
- TCPClient.cs
- BindingBase.cs
- TokenBasedSetEnumerator.cs
- XmlSchemaImport.cs
- BinaryFormatterWriter.cs
- httpserverutility.cs
- PackageStore.cs
- DataGridItem.cs
- CryptoKeySecurity.cs
- MetadataUtilsSmi.cs
- SourceItem.cs
- StandardBindingOptionalReliableSessionElement.cs
- DataGridViewButtonColumn.cs
- ObjectDataSourceEventArgs.cs
- SynchronizedDispatch.cs
- TemplateEditingVerb.cs
- XmlAttributeAttribute.cs
- FrameworkReadOnlyPropertyMetadata.cs
- ProtocolsConfigurationHandler.cs
- RoutedUICommand.cs
- ListItem.cs
- MenuItemCollection.cs
- SchemeSettingElementCollection.cs
- WebPartDisplayMode.cs
- SaveFileDialog.cs
- EventData.cs
- NetCodeGroup.cs
- brushes.cs
- InProcStateClientManager.cs
- Nullable.cs
- AsymmetricSignatureDeformatter.cs
- RotateTransform.cs
- FragmentNavigationEventArgs.cs
- PartialTrustValidationBehavior.cs
- ManagedCodeMarkers.cs
- HitTestFilterBehavior.cs
- ValidatorUtils.cs
- HtmlElementErrorEventArgs.cs
- Vector3DConverter.cs
- XamlFrame.cs
- _NetRes.cs
- TimeoutHelper.cs
- ConfigPathUtility.cs
- ModifyActivitiesPropertyDescriptor.cs
- Cursors.cs
- DataGridViewColumn.cs
- ZipFileInfoCollection.cs
- BaseParser.cs
- TextBox.cs
- Route.cs
- FtpRequestCacheValidator.cs
- NativeMethodsCLR.cs
- RenderOptions.cs
- ObjectListCommandEventArgs.cs
- DbCommandDefinition.cs
- GeneralTransform.cs
- SymbolType.cs
- SecurityCriticalDataForSet.cs
- OverrideMode.cs
- DbProviderFactoriesConfigurationHandler.cs
- OdbcParameterCollection.cs
- MemoryStream.cs
- SamlSubjectStatement.cs
- ClientBuildManagerCallback.cs
- ArgumentOutOfRangeException.cs
- ZipArchive.cs
- TableItemStyle.cs
- PreviewPrintController.cs
- SystemColorTracker.cs
- compensatingcollection.cs
- RawContentTypeMapper.cs
- OrderByBuilder.cs
- ReliableSessionBindingElement.cs
- PixelFormat.cs
- Compiler.cs
- VersionedStreamOwner.cs
- HierarchicalDataTemplate.cs
- GcHandle.cs
- ScrollEventArgs.cs
- SqlClientWrapperSmiStreamChars.cs
- SingleStorage.cs