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
- DPCustomTypeDescriptor.cs
- XmlFormatExtensionAttribute.cs
- RequestBringIntoViewEventArgs.cs
- HyperLinkField.cs
- TimeoutException.cs
- SharedRuntimeState.cs
- StateBag.cs
- StringConverter.cs
- XmlSortKey.cs
- PassportIdentity.cs
- DPAPIProtectedConfigurationProvider.cs
- XmlNotation.cs
- UnhandledExceptionEventArgs.cs
- PropertyPathWorker.cs
- CheckBoxStandardAdapter.cs
- MappingException.cs
- SafeMemoryMappedViewHandle.cs
- FixedSOMPageElement.cs
- InProcStateClientManager.cs
- DataGridItemCollection.cs
- CriticalFinalizerObject.cs
- FlowDocumentScrollViewer.cs
- _SSPIWrapper.cs
- WebPartTransformerCollection.cs
- ControlBindingsCollection.cs
- EntityRecordInfo.cs
- ChooseAction.cs
- ItemType.cs
- ReadWriteSpinLock.cs
- EventToken.cs
- Binding.cs
- Vertex.cs
- BaseCodeDomTreeGenerator.cs
- FixedPageProcessor.cs
- HtmlProps.cs
- DefaultTextStore.cs
- DataBindingCollection.cs
- KnowledgeBase.cs
- Formatter.cs
- LocatorGroup.cs
- EditorPart.cs
- CalendarDesigner.cs
- SpanIndex.cs
- ConsumerConnectionPoint.cs
- BooleanProjectedSlot.cs
- ListBoxAutomationPeer.cs
- CryptoProvider.cs
- NamespaceDecl.cs
- InternalRelationshipCollection.cs
- UxThemeWrapper.cs
- StreamInfo.cs
- ColorBlend.cs
- EmptyEnumerator.cs
- IFlowDocumentViewer.cs
- MediaContextNotificationWindow.cs
- PerformanceCounterPermissionEntryCollection.cs
- RowToParametersTransformer.cs
- InputElement.cs
- ClientSponsor.cs
- PictureBox.cs
- TemplateModeChangedEventArgs.cs
- ToolStripManager.cs
- DataGridCaption.cs
- RijndaelManagedTransform.cs
- AuthorizationRule.cs
- SynchronizedInputPattern.cs
- SelectionService.cs
- TemplateControl.cs
- WebPartConnectionsConnectVerb.cs
- XmlSchemas.cs
- PolyBezierSegment.cs
- XmlSchemaElement.cs
- ScrollEvent.cs
- TemplateComponentConnector.cs
- TraversalRequest.cs
- ObjectSet.cs
- VariableExpressionConverter.cs
- DataGridViewSelectedColumnCollection.cs
- GatewayIPAddressInformationCollection.cs
- PropertyEmitterBase.cs
- Root.cs
- MSHTMLHost.cs
- PkcsUtils.cs
- KnowledgeBase.cs
- DocumentProperties.cs
- CodeIdentifier.cs
- GenericRootAutomationPeer.cs
- Expression.DebuggerProxy.cs
- PrinterSettings.cs
- WebConfigurationFileMap.cs
- IODescriptionAttribute.cs
- MimeMultiPart.cs
- TimeSpanMinutesConverter.cs
- Utils.cs
- RootDesignerSerializerAttribute.cs
- NonBatchDirectoryCompiler.cs
- AuthenticationConfig.cs
- HiddenField.cs
- ToolStripRenderEventArgs.cs
- TextPointer.cs