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
- PageRanges.cs
- BamlTreeNode.cs
- ToolStripHighContrastRenderer.cs
- CapabilitiesAssignment.cs
- DependencyObjectPropertyDescriptor.cs
- ReferenceEqualityComparer.cs
- Int32Rect.cs
- SoapAttributeAttribute.cs
- TextTreeTextElementNode.cs
- BindingList.cs
- UInt64Storage.cs
- MembershipValidatePasswordEventArgs.cs
- _NTAuthentication.cs
- CheckBoxField.cs
- DownloadProgressEventArgs.cs
- TypeHelpers.cs
- ModelMemberCollection.cs
- VersionedStream.cs
- BindingGroup.cs
- webproxy.cs
- Font.cs
- Localizer.cs
- MemoryPressure.cs
- UshortList2.cs
- ProtocolsSection.cs
- TextPattern.cs
- PropertyGridView.cs
- GorillaCodec.cs
- CodeAttributeDeclarationCollection.cs
- AttributeCollection.cs
- TreeViewHitTestInfo.cs
- _HeaderInfoTable.cs
- ConfigDefinitionUpdates.cs
- SchemaCollectionPreprocessor.cs
- SoapFormatterSinks.cs
- PrivilegeNotHeldException.cs
- errorpatternmatcher.cs
- InternalSafeNativeMethods.cs
- RelationshipManager.cs
- TextBoxBase.cs
- TextEditorDragDrop.cs
- TextServicesProperty.cs
- AssemblyInfo.cs
- SoapAttributes.cs
- CharacterMetrics.cs
- ApplicationFileCodeDomTreeGenerator.cs
- HttpWebRequestElement.cs
- RightNameExpirationInfoPair.cs
- counter.cs
- WebRequestModuleElementCollection.cs
- TogglePattern.cs
- InputBuffer.cs
- SafeNativeMethods.cs
- DataGridViewEditingControlShowingEventArgs.cs
- RuleElement.cs
- UInt16Storage.cs
- SqlTriggerAttribute.cs
- CacheRequest.cs
- FrameworkContextData.cs
- MutexSecurity.cs
- TableLayoutSettings.cs
- SafeArrayRankMismatchException.cs
- OleDbConnectionInternal.cs
- WsiProfilesElement.cs
- RowUpdatingEventArgs.cs
- HtmlInputSubmit.cs
- BinaryWriter.cs
- RoleManagerSection.cs
- WindowsGraphics.cs
- TrackingProfileCache.cs
- CreateUserWizardAutoFormat.cs
- DebuggerAttributes.cs
- FlowPosition.cs
- CompositeDataBoundControl.cs
- WebBrowserUriTypeConverter.cs
- XmlElementElement.cs
- Listbox.cs
- FileRecordSequenceHelper.cs
- Int16AnimationUsingKeyFrames.cs
- MultiplexingDispatchMessageFormatter.cs
- RegularExpressionValidator.cs
- ListItemViewAttribute.cs
- MSAAWinEventWrap.cs
- AvtEvent.cs
- SurrogateEncoder.cs
- BinarySerializer.cs
- Input.cs
- Propagator.ExtentPlaceholderCreator.cs
- Exceptions.cs
- Scene3D.cs
- KeyTime.cs
- StorageBasedPackageProperties.cs
- DataGridViewCellStateChangedEventArgs.cs
- DefaultTypeArgumentAttribute.cs
- CustomAttribute.cs
- ExpressionBuilder.cs
- SqlBuilder.cs
- BinarySecretSecurityToken.cs
- _FtpDataStream.cs
- ExpressionBuilderContext.cs