Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- base64Transforms.cs
- SqlRowUpdatedEvent.cs
- ViewManager.cs
- DatePickerDateValidationErrorEventArgs.cs
- ActivityTrace.cs
- ControlAdapter.cs
- SchemaNames.cs
- BitConverter.cs
- UDPClient.cs
- ComPlusThreadInitializer.cs
- TableSectionStyle.cs
- InputReportEventArgs.cs
- PropertyMetadata.cs
- BinaryObjectWriter.cs
- odbcmetadatacolumnnames.cs
- DriveInfo.cs
- ThumbAutomationPeer.cs
- OleDbWrapper.cs
- DistributedTransactionPermission.cs
- DodSequenceMerge.cs
- NavigationPropertyAccessor.cs
- SpeechRecognizer.cs
- BStrWrapper.cs
- WebColorConverter.cs
- BasicExpressionVisitor.cs
- DecimalAnimationUsingKeyFrames.cs
- Font.cs
- ListItemCollection.cs
- XPathDocumentBuilder.cs
- SoapHelper.cs
- BamlMapTable.cs
- DetailsViewInsertEventArgs.cs
- BamlBinaryReader.cs
- MobileUserControl.cs
- AsyncStreamReader.cs
- VisemeEventArgs.cs
- ReadOnlyDataSource.cs
- DocumentManager.cs
- TemplateDefinition.cs
- panel.cs
- TileBrush.cs
- IndividualDeviceConfig.cs
- DSASignatureFormatter.cs
- GeneralTransform3D.cs
- MasterPage.cs
- FlowDocumentFormatter.cs
- RightsManagementErrorHandler.cs
- Table.cs
- Constraint.cs
- MenuItemStyle.cs
- CardSpacePolicyElement.cs
- Int16Animation.cs
- SystemIPAddressInformation.cs
- NamedObject.cs
- ConfigurationLocationCollection.cs
- MembershipSection.cs
- SqlConnection.cs
- MsmqTransportSecurity.cs
- CaseInsensitiveComparer.cs
- KoreanLunisolarCalendar.cs
- SiteMapDataSourceView.cs
- WsatStrings.cs
- InvalidAsynchronousStateException.cs
- StandardToolWindows.cs
- JsonReader.cs
- WindowsTreeView.cs
- GridViewColumnCollection.cs
- CursorConverter.cs
- SchemaMapping.cs
- InheritanceService.cs
- EnumMemberAttribute.cs
- PreProcessInputEventArgs.cs
- ListManagerBindingsCollection.cs
- TableItemPattern.cs
- ScriptResourceMapping.cs
- ErrorRuntimeConfig.cs
- TypeName.cs
- PersistChildrenAttribute.cs
- SingleKeyFrameCollection.cs
- RowBinding.cs
- OptimalBreakSession.cs
- CommentAction.cs
- StringToken.cs
- TextCompositionEventArgs.cs
- DataGridViewRowsRemovedEventArgs.cs
- DrawingCollection.cs
- CodeTypeMember.cs
- CircleHotSpot.cs
- SourceFilter.cs
- embossbitmapeffect.cs
- ResourcePart.cs
- DataGridViewTopRowAccessibleObject.cs
- PublisherMembershipCondition.cs
- ToolStripItemClickedEventArgs.cs
- AnimationException.cs
- ContextDataSourceView.cs
- WebPartConnectionCollection.cs
- BitmapEffectGeneralTransform.cs
- DefaultShape.cs
- Int32Storage.cs