Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- TypeGeneratedEventArgs.cs
- DocumentApplication.cs
- RepeatBehaviorConverter.cs
- PropertyInfoSet.cs
- TraceEventCache.cs
- BulletedList.cs
- OutputScopeManager.cs
- DataSourceControlBuilder.cs
- StructuredProperty.cs
- WebBrowser.cs
- SqlLiftIndependentRowExpressions.cs
- MediaElementAutomationPeer.cs
- BaseServiceProvider.cs
- XDRSchema.cs
- SqlMultiplexer.cs
- SendMailErrorEventArgs.cs
- Nodes.cs
- _UriTypeConverter.cs
- XmlBaseReader.cs
- XPathNodeList.cs
- QueryParameter.cs
- CultureInfoConverter.cs
- VScrollBar.cs
- DataGridViewBindingCompleteEventArgs.cs
- DrawingServices.cs
- MemberJoinTreeNode.cs
- FacetEnabledSchemaElement.cs
- IisTraceWebEventProvider.cs
- UnauthorizedWebPart.cs
- OutputCacheProfile.cs
- PtsHelper.cs
- EntityContainerEmitter.cs
- StickyNote.cs
- ZipFileInfo.cs
- PageAsyncTask.cs
- EncoderNLS.cs
- ManifestResourceInfo.cs
- ClientSideQueueItem.cs
- InputLanguage.cs
- FieldAccessException.cs
- XmlSchemaAnnotated.cs
- ObjectDataSourceView.cs
- AuthorizationRuleCollection.cs
- ActiveXSite.cs
- KeyGestureConverter.cs
- ClientRuntimeConfig.cs
- CompositeFontInfo.cs
- ObjectSpanRewriter.cs
- ErrorEventArgs.cs
- AssociatedControlConverter.cs
- CheckBoxAutomationPeer.cs
- ExpressionsCollectionConverter.cs
- SafeRightsManagementQueryHandle.cs
- ToolStripSystemRenderer.cs
- MultipartIdentifier.cs
- BrowserDefinition.cs
- SchemaCollectionPreprocessor.cs
- MultiBindingExpression.cs
- MILUtilities.cs
- XamlReaderHelper.cs
- AssemblyCacheEntry.cs
- DragEventArgs.cs
- ManagementOperationWatcher.cs
- IdentityElement.cs
- ContentType.cs
- RegexTypeEditor.cs
- HealthMonitoringSection.cs
- CharacterHit.cs
- PropertyKey.cs
- EmissiveMaterial.cs
- WindowsFormsHost.cs
- PhysicalFontFamily.cs
- SchemaNamespaceManager.cs
- Misc.cs
- EntityContainerRelationshipSetEnd.cs
- InstanceKey.cs
- XhtmlBasicPhoneCallAdapter.cs
- ProtocolsConfiguration.cs
- IImplicitResourceProvider.cs
- RegexTree.cs
- IndependentAnimationStorage.cs
- HorizontalAlignConverter.cs
- LightweightEntityWrapper.cs
- Convert.cs
- DataReceivedEventArgs.cs
- RightsDocument.cs
- VisualBasicSettings.cs
- CommandHelpers.cs
- Comparer.cs
- ItemCollection.cs
- SignedXml.cs
- PartitionedStreamMerger.cs
- ServiceOperationInvoker.cs
- XmlSchemaRedefine.cs
- Rules.cs
- XPathSingletonIterator.cs
- WindowsScrollBar.cs
- ConfigXmlCDataSection.cs
- connectionpool.cs
- TimeSpanParse.cs