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
- TableLayoutSettingsTypeConverter.cs
- ErrorInfoXmlDocument.cs
- Variant.cs
- Constants.cs
- SmtpDigestAuthenticationModule.cs
- InputScopeNameConverter.cs
- TypeDescriptor.cs
- DataGridToolTip.cs
- Triplet.cs
- ObjectViewQueryResultData.cs
- BitmapEffectInput.cs
- _BufferOffsetSize.cs
- CompositionCommandSet.cs
- ToolStripSeparatorRenderEventArgs.cs
- CaseInsensitiveComparer.cs
- ColorAnimation.cs
- GridViewRow.cs
- SqlProcedureAttribute.cs
- ScrollItemProviderWrapper.cs
- TemplatePropertyEntry.cs
- Base64Decoder.cs
- RepeaterCommandEventArgs.cs
- ZipFileInfo.cs
- ImageSource.cs
- WpfKnownMemberInvoker.cs
- TextDecorationCollectionConverter.cs
- DataTemplateKey.cs
- MasterPageCodeDomTreeGenerator.cs
- VirtualDirectoryMappingCollection.cs
- SimpleWebHandlerParser.cs
- OleDbRowUpdatingEvent.cs
- UserValidatedEventArgs.cs
- MenuAutomationPeer.cs
- DataKey.cs
- GridViewItemAutomationPeer.cs
- Utils.cs
- DrawListViewSubItemEventArgs.cs
- WindowsListViewItem.cs
- SegmentInfo.cs
- HMACSHA512.cs
- UpdateCommand.cs
- SHA1Managed.cs
- BasePropertyDescriptor.cs
- CatalogPartChrome.cs
- XmlSerializationGeneratedCode.cs
- FormViewPagerRow.cs
- WebHttpSecurity.cs
- TreeView.cs
- MailMessageEventArgs.cs
- AnimationStorage.cs
- NetPeerTcpBindingCollectionElement.cs
- ExceptionValidationRule.cs
- PagerSettings.cs
- TextProviderWrapper.cs
- RelationalExpressions.cs
- RequestCacheValidator.cs
- EnumValAlphaComparer.cs
- PKCS1MaskGenerationMethod.cs
- ConfigViewGenerator.cs
- Int32CAMarshaler.cs
- SchemaNames.cs
- ConnectionPoint.cs
- TreeViewCancelEvent.cs
- AutomationElementCollection.cs
- KnownTypesProvider.cs
- ChannelTerminatedException.cs
- LinkConverter.cs
- ViewGenerator.cs
- CornerRadiusConverter.cs
- WriterOutput.cs
- XmlJsonReader.cs
- CustomErrorCollection.cs
- CodeValidator.cs
- SmiConnection.cs
- InstanceData.cs
- PageAsyncTask.cs
- UriSectionReader.cs
- TypedReference.cs
- HealthMonitoringSection.cs
- CodeTypeDeclaration.cs
- WebPartDescription.cs
- ByteAnimationBase.cs
- HttpListenerRequestTraceRecord.cs
- ErrorWebPart.cs
- QuestionEventArgs.cs
- CompiledQuery.cs
- PriorityChain.cs
- DataListItemEventArgs.cs
- DmlSqlGenerator.cs
- EncoderExceptionFallback.cs
- ObjectParameterCollection.cs
- ErrorTolerantObjectWriter.cs
- MobileControlsSectionHelper.cs
- WorkflowPersistenceContext.cs
- MultiAsyncResult.cs
- IDispatchConstantAttribute.cs
- ChannelBinding.cs
- OperationCanceledException.cs
- XmlCustomFormatter.cs
- AnyReturnReader.cs