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
- StdRegProviderWrapper.cs
- SystemEvents.cs
- UnconditionalPolicy.cs
- DBBindings.cs
- ParserHooks.cs
- BookmarkTable.cs
- StrongNameSignatureInformation.cs
- PropertyMapper.cs
- DropShadowEffect.cs
- TimeSpanConverter.cs
- CultureSpecificCharacterBufferRange.cs
- VisualTreeHelper.cs
- OleDbError.cs
- AsynchronousChannel.cs
- SafeCryptoHandles.cs
- SystemBrushes.cs
- HtmlProps.cs
- ObjectListSelectEventArgs.cs
- ResolveMatches11.cs
- UriTemplatePathPartiallyEquivalentSet.cs
- PanelContainerDesigner.cs
- ConnectionStringSettings.cs
- Figure.cs
- UpdateCompiler.cs
- HtmlAnchor.cs
- ContextMarshalException.cs
- storepermissionattribute.cs
- ByteRangeDownloader.cs
- metadatamappinghashervisitor.cs
- SymbolMethod.cs
- NativeMethods.cs
- NativeActivityContext.cs
- PixelFormatConverter.cs
- ErrorTableItemStyle.cs
- TextTrailingWordEllipsis.cs
- IisTraceWebEventProvider.cs
- DrawingAttributeSerializer.cs
- UserControl.cs
- JsonByteArrayDataContract.cs
- DataSourceView.cs
- DateTimeAutomationPeer.cs
- EtwTrackingParticipant.cs
- DefaultCommandConverter.cs
- SchemaEntity.cs
- TagPrefixAttribute.cs
- GeometryHitTestResult.cs
- util.cs
- ReturnEventArgs.cs
- Inflater.cs
- PropertyTabAttribute.cs
- FixedTextView.cs
- safelink.cs
- AsyncCodeActivity.cs
- PathStreamGeometryContext.cs
- ProvideValueServiceProvider.cs
- COAUTHINFO.cs
- WorkflowInstanceAbortedRecord.cs
- FontFamilyValueSerializer.cs
- WebPartDisplayModeEventArgs.cs
- SynchronizedInputAdaptor.cs
- MemberDomainMap.cs
- sqlstateclientmanager.cs
- Pair.cs
- DataGridViewCellMouseEventArgs.cs
- Point3DAnimationUsingKeyFrames.cs
- HtmlTableCell.cs
- Atom10ItemFormatter.cs
- SQLBytes.cs
- Stylus.cs
- DbInsertCommandTree.cs
- EventQueueState.cs
- NonBatchDirectoryCompiler.cs
- CombinedTcpChannel.cs
- RegistryPermission.cs
- RequestQueue.cs
- AttributeProviderAttribute.cs
- HelpProvider.cs
- RuntimeWrappedException.cs
- TabItemWrapperAutomationPeer.cs
- CapiSymmetricAlgorithm.cs
- StreamMarshaler.cs
- DetailsView.cs
- CanonicalFontFamilyReference.cs
- TreeWalker.cs
- OutputChannel.cs
- SevenBitStream.cs
- WebHttpBinding.cs
- ByteArrayHelperWithString.cs
- Separator.cs
- OdbcConnectionStringbuilder.cs
- DBConnectionString.cs
- LayoutExceptionEventArgs.cs
- PathFigure.cs
- ExtentCqlBlock.cs
- ParameterModifier.cs
- SBCSCodePageEncoding.cs
- OpCodes.cs
- ElementAction.cs
- SectionInformation.cs
- AutomationAttributeInfo.cs