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
- DesignerLinkAdapter.cs
- __FastResourceComparer.cs
- LookupNode.cs
- ProfileGroupSettingsCollection.cs
- SecurityProtocolFactory.cs
- ToolStripHighContrastRenderer.cs
- SqlDataSourceCache.cs
- EntityContainerEntitySet.cs
- TypeConverter.cs
- SerTrace.cs
- TraceLevelStore.cs
- SqlCacheDependencyDatabase.cs
- ParagraphVisual.cs
- DataContractJsonSerializer.cs
- MonikerUtility.cs
- ToolStripStatusLabel.cs
- ExpandButtonVisibilityConverter.cs
- AsyncCompletedEventArgs.cs
- CompiledQueryCacheKey.cs
- GeneralTransform2DTo3DTo2D.cs
- PackageRelationshipCollection.cs
- PersonalizableTypeEntry.cs
- SchemaConstraints.cs
- TextEditorDragDrop.cs
- WorkflowViewStateService.cs
- ImportDesigner.xaml.cs
- Camera.cs
- FontFaceLayoutInfo.cs
- invalidudtexception.cs
- recordstate.cs
- TcpClientCredentialType.cs
- OutOfProcStateClientManager.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- DataGridItem.cs
- ProfileProvider.cs
- AutomationPeer.cs
- XmlSchemaAppInfo.cs
- SettingsSavedEventArgs.cs
- MimeImporter.cs
- CqlGenerator.cs
- RadioButtonDesigner.cs
- PatternMatcher.cs
- Point3DAnimationUsingKeyFrames.cs
- WebContext.cs
- SpecialFolderEnumConverter.cs
- MenuItemStyle.cs
- HostVisual.cs
- GeneralTransform.cs
- SystemBrushes.cs
- DataGridViewRowPostPaintEventArgs.cs
- HandleCollector.cs
- BitSet.cs
- DodSequenceMerge.cs
- PreviewKeyDownEventArgs.cs
- ContentDisposition.cs
- OrthographicCamera.cs
- PreservationFileWriter.cs
- TableRowsCollectionEditor.cs
- CodeDelegateCreateExpression.cs
- DataSourceControl.cs
- ComponentManagerBroker.cs
- NativeStructs.cs
- CaseStatementSlot.cs
- SQLInt32Storage.cs
- SoapTypeAttribute.cs
- Point3DAnimation.cs
- ImageSourceValueSerializer.cs
- SessionIDManager.cs
- GZipDecoder.cs
- DSACryptoServiceProvider.cs
- ContentElement.cs
- MemoryPressure.cs
- DoWorkEventArgs.cs
- RoleManagerModule.cs
- SolidColorBrush.cs
- ThreadInterruptedException.cs
- DbModificationClause.cs
- DbProviderFactoriesConfigurationHandler.cs
- DurableEnlistmentState.cs
- DecoderNLS.cs
- COAUTHINFO.cs
- HatchBrush.cs
- Msec.cs
- TypeInfo.cs
- EditorPartChrome.cs
- TextReturnReader.cs
- SecureStringHasher.cs
- BitmapSource.cs
- HostingPreferredMapPath.cs
- StreamUpdate.cs
- FormattedText.cs
- ServiceMetadataExtension.cs
- webeventbuffer.cs
- ListItemConverter.cs
- HtmlMeta.cs
- ParameterExpression.cs
- OleDbDataAdapter.cs
- ConfigurationElement.cs
- Nodes.cs
- Converter.cs