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
- ModelItemDictionaryImpl.cs
- InputLanguageSource.cs
- BindingEntityInfo.cs
- SystemTcpConnection.cs
- ClientConvert.cs
- RangeBaseAutomationPeer.cs
- SQLInt32.cs
- WindowsGraphicsCacheManager.cs
- TypeBrowser.xaml.cs
- PrintPreviewControl.cs
- ImportContext.cs
- AutomationTextAttribute.cs
- DbDeleteCommandTree.cs
- ChtmlLinkAdapter.cs
- PropertyNames.cs
- DirectoryInfo.cs
- SwitchAttribute.cs
- GenericPrincipal.cs
- PrintingPermission.cs
- AssociationSetMetadata.cs
- ElementNotEnabledException.cs
- Property.cs
- ElementFactory.cs
- BlobPersonalizationState.cs
- Polyline.cs
- Semaphore.cs
- FileChangesMonitor.cs
- SlipBehavior.cs
- ResourceManagerWrapper.cs
- SerializableTypeCodeDomSerializer.cs
- DataServiceProviderMethods.cs
- counter.cs
- TaskFormBase.cs
- SoapHeaderException.cs
- ColorConvertedBitmapExtension.cs
- StandardOleMarshalObject.cs
- SoapException.cs
- ScrollData.cs
- DataRelationPropertyDescriptor.cs
- SafeEventLogWriteHandle.cs
- XmlSchemaSimpleTypeRestriction.cs
- ToolBar.cs
- securitycriticaldataformultiplegetandset.cs
- Helper.cs
- LayoutManager.cs
- PrintingPermission.cs
- ConfigurationStrings.cs
- OdbcException.cs
- SqlMethodCallConverter.cs
- WindowInteractionStateTracker.cs
- PathFigure.cs
- CompilerResults.cs
- BezierSegment.cs
- FormatterServicesNoSerializableCheck.cs
- HttpConfigurationSystem.cs
- BitmapEffectRenderDataResource.cs
- CodeConditionStatement.cs
- Composition.cs
- IndexedGlyphRun.cs
- PrePrepareMethodAttribute.cs
- WebBrowserProgressChangedEventHandler.cs
- Stack.cs
- Handle.cs
- BrowserTree.cs
- RoleManagerEventArgs.cs
- XmlSerializationGeneratedCode.cs
- XmlObjectSerializerWriteContextComplex.cs
- SingleBodyParameterMessageFormatter.cs
- httpserverutility.cs
- BitmapDecoder.cs
- WebCategoryAttribute.cs
- SafeBitVector32.cs
- regiisutil.cs
- Int64Animation.cs
- FunctionImportElement.cs
- EdmToObjectNamespaceMap.cs
- Comparer.cs
- MaskDescriptor.cs
- EmbeddedMailObjectsCollection.cs
- DescendantQuery.cs
- QuaternionAnimation.cs
- HierarchicalDataSourceControl.cs
- TabControl.cs
- COM2ExtendedTypeConverter.cs
- DefaultBindingPropertyAttribute.cs
- DataColumnPropertyDescriptor.cs
- DataPagerField.cs
- MouseEventArgs.cs
- ContentValidator.cs
- OrderByBuilder.cs
- TextRangeEditLists.cs
- SqlRetyper.cs
- CodeExpressionCollection.cs
- PeerUnsafeNativeMethods.cs
- ViewEvent.cs
- PageContentCollection.cs
- WindowsBrush.cs
- SynchronizationContext.cs
- MemoryMappedViewStream.cs
- CollectionView.cs