Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- Border.cs
- MethodCallTranslator.cs
- WebPartTracker.cs
- TransactionTable.cs
- CompilerErrorCollection.cs
- Permission.cs
- OdbcConnectionHandle.cs
- ValidatedControlConverter.cs
- QuaternionAnimation.cs
- BuildProviderCollection.cs
- RegistrySecurity.cs
- TextureBrush.cs
- FillBehavior.cs
- TextInfo.cs
- ProgressBarRenderer.cs
- OdbcTransaction.cs
- HttpStaticObjectsCollectionWrapper.cs
- LinkLabelLinkClickedEvent.cs
- DataPagerFieldCommandEventArgs.cs
- DataFormat.cs
- D3DImage.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- PassportAuthenticationModule.cs
- TypeConverterBase.cs
- WindowsListViewGroup.cs
- BoundingRectTracker.cs
- XmlBoundElement.cs
- ImageBrush.cs
- DecoderBestFitFallback.cs
- WeakEventManager.cs
- ToolStripHighContrastRenderer.cs
- ToolStripOverflow.cs
- DataSetViewSchema.cs
- CustomAttribute.cs
- X509IssuerSerialKeyIdentifierClause.cs
- CodeArrayCreateExpression.cs
- Italic.cs
- SiteMapNodeItem.cs
- ClientData.cs
- ServiceObjectContainer.cs
- BulletedList.cs
- SortKey.cs
- ToolCreatedEventArgs.cs
- PasswordPropertyTextAttribute.cs
- GenericWebPart.cs
- UriScheme.cs
- ToolStripLabel.cs
- RegionIterator.cs
- ICollection.cs
- SchemaTypeEmitter.cs
- EpmContentSerializerBase.cs
- PenCursorManager.cs
- TextWriter.cs
- Transform3DGroup.cs
- CodeEventReferenceExpression.cs
- FixedMaxHeap.cs
- WriteTimeStream.cs
- TaskResultSetter.cs
- Stream.cs
- TextEditorSpelling.cs
- XmlAtomicValue.cs
- TagElement.cs
- SelectedGridItemChangedEvent.cs
- PkcsUtils.cs
- SocketPermission.cs
- DbProviderSpecificTypePropertyAttribute.cs
- QueryCursorEventArgs.cs
- Codec.cs
- ServiceChannelProxy.cs
- TableCell.cs
- PathBox.cs
- DocumentSignatureManager.cs
- Misc.cs
- StringComparer.cs
- _NegoStream.cs
- SourceFileBuildProvider.cs
- QueryPageSettingsEventArgs.cs
- ConversionHelper.cs
- Substitution.cs
- HttpCapabilitiesSectionHandler.cs
- CodeCompiler.cs
- PageContentCollection.cs
- InkCanvas.cs
- DataGridViewIntLinkedList.cs
- MarkedHighlightComponent.cs
- Visual3DCollection.cs
- HiddenField.cs
- DbFunctionCommandTree.cs
- RuntimeResourceSet.cs
- AbstractDataSvcMapFileLoader.cs
- WindowsPen.cs
- CommonDialog.cs
- LambdaCompiler.cs
- SafeEventLogReadHandle.cs
- NativeWindow.cs
- XmlWriterTraceListener.cs
- TCPListener.cs
- DataGridViewButtonCell.cs
- BaseInfoTable.cs
- InheritanceUI.cs