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
- DigestTraceRecordHelper.cs
- EntityContainerEmitter.cs
- DocumentSequenceHighlightLayer.cs
- HttpPostedFileBase.cs
- ApplicationSecurityManager.cs
- UidPropertyAttribute.cs
- SectionVisual.cs
- StringAnimationBase.cs
- TdsParserStaticMethods.cs
- TextBoxRenderer.cs
- TraversalRequest.cs
- BinaryMethodMessage.cs
- NavigationHelper.cs
- CrossContextChannel.cs
- IgnoreFlushAndCloseStream.cs
- FontFamilyIdentifier.cs
- InkCanvasFeedbackAdorner.cs
- EngineSite.cs
- TextPatternIdentifiers.cs
- WrappedIUnknown.cs
- ShaderEffect.cs
- TraceHwndHost.cs
- ChannelEndpointElement.cs
- SchemaObjectWriter.cs
- ListViewSortEventArgs.cs
- XmlnsCache.cs
- documentsequencetextpointer.cs
- XmlDictionaryReader.cs
- XmlImplementation.cs
- ModuleElement.cs
- EntityTypeEmitter.cs
- ToolBarButtonClickEvent.cs
- CustomServiceCredentials.cs
- XmlLoader.cs
- ContextMarshalException.cs
- CopyNamespacesAction.cs
- DbDataAdapter.cs
- PrintingPermission.cs
- MultipleViewPattern.cs
- AppDomainUnloadedException.cs
- FontDriver.cs
- ListSortDescription.cs
- ServicesUtilities.cs
- TemplateAction.cs
- StateMachineWorkflowDesigner.cs
- ToolBarTray.cs
- Speller.cs
- DesignerActionVerbList.cs
- ComponentEditorPage.cs
- CapacityStreamGeometryContext.cs
- MethodToken.cs
- Input.cs
- XmlSerializerSection.cs
- SessionParameter.cs
- DataServiceRequestOfT.cs
- GeneratedContractType.cs
- XamlParser.cs
- SafeLibraryHandle.cs
- Journaling.cs
- SecurityHeaderLayout.cs
- DependentList.cs
- JavaScriptString.cs
- ProfessionalColors.cs
- NumericUpDown.cs
- CompensationExtension.cs
- AssemblyName.cs
- FlowNode.cs
- StateDesigner.Helpers.cs
- RewritingValidator.cs
- ScriptReference.cs
- DataGridViewCellStyleChangedEventArgs.cs
- TextRunCacheImp.cs
- XmlDataSourceNodeDescriptor.cs
- MarkerProperties.cs
- DataGridColumnHeader.cs
- SyntaxCheck.cs
- PackageDigitalSignature.cs
- ProjectionRewriter.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- CardSpacePolicyElement.cs
- DataGridCell.cs
- DnsPermission.cs
- DictionaryCustomTypeDescriptor.cs
- CommandField.cs
- SafeNativeMethods.cs
- SqlRewriteScalarSubqueries.cs
- OpenTypeLayoutCache.cs
- DesignerDataTableBase.cs
- UdpSocket.cs
- MenuItemCollectionEditorDialog.cs
- WebPartVerbsEventArgs.cs
- HttpProxyTransportBindingElement.cs
- TdsParserHelperClasses.cs
- InkCanvasSelection.cs
- GenericAuthenticationEventArgs.cs
- CompilerResults.cs
- localization.cs
- ReliableMessagingHelpers.cs
- AccessKeyManager.cs
- Material.cs