Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- PopupRootAutomationPeer.cs
- EraserBehavior.cs
- bidPrivateBase.cs
- DbDataAdapter.cs
- TablePattern.cs
- WindowsStatusBar.cs
- EnumMember.cs
- TextTreeInsertElementUndoUnit.cs
- ZipIOLocalFileHeader.cs
- TextEffect.cs
- XmlWellformedWriter.cs
- CategoryGridEntry.cs
- FormsAuthenticationTicket.cs
- FixedTextView.cs
- BaseAppDomainProtocolHandler.cs
- OciHandle.cs
- EventListenerClientSide.cs
- ValidatingReaderNodeData.cs
- SelectorItemAutomationPeer.cs
- FtpRequestCacheValidator.cs
- oledbconnectionstring.cs
- HttpCookie.cs
- AdornerLayer.cs
- WebServicesInteroperability.cs
- UrlAuthorizationModule.cs
- DocumentViewer.cs
- TemplatedControlDesigner.cs
- EntityDataSourceDesigner.cs
- MatrixTransform3D.cs
- PartBasedPackageProperties.cs
- PriorityRange.cs
- UriTemplate.cs
- DateBoldEvent.cs
- PolyLineSegmentFigureLogic.cs
- StrongNameIdentityPermission.cs
- DefaultAutoFieldGenerator.cs
- TempEnvironment.cs
- GrabHandleGlyph.cs
- SizeConverter.cs
- SafeNativeMethods.cs
- WindowsGraphics2.cs
- ConnectorMovedEventArgs.cs
- MetadataArtifactLoaderComposite.cs
- PageCatalogPart.cs
- XmlBinaryWriterSession.cs
- GroupBoxRenderer.cs
- RbTree.cs
- SettingsPropertyCollection.cs
- LogWriteRestartAreaState.cs
- BrowserTree.cs
- InlinedAggregationOperator.cs
- Popup.cs
- KeyGestureValueSerializer.cs
- DataSourceDesigner.cs
- ProcessExitedException.cs
- FtpWebResponse.cs
- FormCollection.cs
- GridViewDeletedEventArgs.cs
- ToolStripSeparatorRenderEventArgs.cs
- AbstractExpressions.cs
- SafeRegistryKey.cs
- LoginName.cs
- MaxMessageSizeStream.cs
- HttpStreamMessageEncoderFactory.cs
- Baml2006KeyRecord.cs
- ToolStripItem.cs
- ModifiableIteratorCollection.cs
- HMACRIPEMD160.cs
- WinCategoryAttribute.cs
- LinearGradientBrush.cs
- PhonemeConverter.cs
- BackgroundWorker.cs
- AvTraceFormat.cs
- XmlQueryType.cs
- JsonGlobals.cs
- Interop.cs
- XamlGridLengthSerializer.cs
- HwndTarget.cs
- AttachedPropertyMethodSelector.cs
- NavigationCommands.cs
- ComponentCache.cs
- Zone.cs
- FileLoadException.cs
- PersistenceTypeAttribute.cs
- Property.cs
- AssemblyEvidenceFactory.cs
- ShapeTypeface.cs
- SplitterCancelEvent.cs
- InputBinding.cs
- PenThreadPool.cs
- BaseDataListDesigner.cs
- DataGridViewDataErrorEventArgs.cs
- XmlNavigatorStack.cs
- PerfCounterSection.cs
- NavigationWindow.cs
- GridItemCollection.cs
- WindowsStatusBar.cs
- MetadataItem.cs
- ScriptReferenceEventArgs.cs
- MeasurementDCInfo.cs