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
- OdbcConnectionFactory.cs
- Main.cs
- XPathNavigatorReader.cs
- TransportContext.cs
- DataBoundControl.cs
- CalendarDayButton.cs
- ToolStripSplitStackLayout.cs
- WindowsGraphicsWrapper.cs
- connectionpool.cs
- FontSource.cs
- ZipIORawDataFileBlock.cs
- PropertyManager.cs
- AffineTransform3D.cs
- CachedPathData.cs
- ClassValidator.cs
- DataObjectSettingDataEventArgs.cs
- DocumentViewerHelper.cs
- DescendantQuery.cs
- ExpressionBuilderCollection.cs
- AttachedPropertyBrowsableAttribute.cs
- TypeNameHelper.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- AbstractSvcMapFileLoader.cs
- User.cs
- RuleRef.cs
- FrameSecurityDescriptor.cs
- ReflectEventDescriptor.cs
- XamlFigureLengthSerializer.cs
- SynchronizationLockException.cs
- PowerStatus.cs
- ServiceDebugElement.cs
- Rfc4050KeyFormatter.cs
- ReadOnlyCollection.cs
- PaintValueEventArgs.cs
- Table.cs
- CompilerGlobalScopeAttribute.cs
- ThemeDictionaryExtension.cs
- Floater.cs
- CircleHotSpot.cs
- ReplyChannel.cs
- ListMarkerLine.cs
- UpdatePanelTrigger.cs
- ToolboxDataAttribute.cs
- PackageProperties.cs
- SerializationInfoEnumerator.cs
- RootNamespaceAttribute.cs
- MenuItemCollection.cs
- NativeWindow.cs
- ProfileEventArgs.cs
- BinaryMessageFormatter.cs
- WebPartEditorOkVerb.cs
- QuaternionRotation3D.cs
- TemplateBaseAction.cs
- SmiRequestExecutor.cs
- XPathNodeHelper.cs
- SqlCacheDependencyDatabaseCollection.cs
- OuterGlowBitmapEffect.cs
- PasswordBox.cs
- ModelItemCollection.cs
- METAHEADER.cs
- HyperlinkAutomationPeer.cs
- TypeInfo.cs
- Identity.cs
- OrthographicCamera.cs
- ChangeNode.cs
- XmlSchemaInferenceException.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- SynchronousChannel.cs
- DataGridViewSelectedColumnCollection.cs
- TimeManager.cs
- ListViewDesigner.cs
- OutputCacheSettings.cs
- FilterElement.cs
- XmlWellformedWriterHelpers.cs
- BindingManagerDataErrorEventArgs.cs
- PrintingPermission.cs
- ManipulationVelocities.cs
- XmlDataProvider.cs
- OracleInfoMessageEventArgs.cs
- XmlNodeList.cs
- ApplicationSecurityManager.cs
- SqlExpressionNullability.cs
- ChtmlCalendarAdapter.cs
- DesignOnlyAttribute.cs
- BodyGlyph.cs
- PointAnimationUsingPath.cs
- UpdateException.cs
- _CacheStreams.cs
- AnnotationComponentChooser.cs
- UniqueIdentifierService.cs
- OleAutBinder.cs
- DynamicQueryableWrapper.cs
- ScrollPatternIdentifiers.cs
- DbTransaction.cs
- InputMethodStateTypeInfo.cs
- ClipboardProcessor.cs
- HandledEventArgs.cs
- DBConnection.cs
- GrowingArray.cs
- SqlDataSourceView.cs