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
- TabItemAutomationPeer.cs
- TypeBuilder.cs
- RuleInfoComparer.cs
- ListControlActionList.cs
- XmlLinkedNode.cs
- HttpWebRequest.cs
- WsatStrings.cs
- ComponentDispatcher.cs
- PathTooLongException.cs
- mediaclock.cs
- SqlComparer.cs
- StdValidatorsAndConverters.cs
- securitymgrsite.cs
- HttpProtocolImporter.cs
- ActiveXSite.cs
- ComplexBindingPropertiesAttribute.cs
- sqlser.cs
- ObjectDisposedException.cs
- MethodAccessException.cs
- TreeViewDesigner.cs
- SqlRowUpdatingEvent.cs
- FormsIdentity.cs
- Table.cs
- SqlCacheDependencyDatabaseCollection.cs
- NonVisualControlAttribute.cs
- XmlConverter.cs
- SqlUserDefinedTypeAttribute.cs
- Base64WriteStateInfo.cs
- TrackingProfile.cs
- FileLogRecordEnumerator.cs
- LinqDataSourceDeleteEventArgs.cs
- LiteralControl.cs
- OutputScopeManager.cs
- EpmContentDeSerializer.cs
- Context.cs
- CodeAssignStatement.cs
- XPathSelfQuery.cs
- MatrixAnimationBase.cs
- DeviceContext2.cs
- SqlExpander.cs
- MailHeaderInfo.cs
- SqlRecordBuffer.cs
- TreeNodeCollectionEditor.cs
- PageAdapter.cs
- TextLineBreak.cs
- ClientConfigurationHost.cs
- ClientTargetCollection.cs
- ResponseStream.cs
- DataControlImageButton.cs
- GeneralTransform3DGroup.cs
- WhitespaceRule.cs
- FrameworkContentElement.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- ClientScriptItem.cs
- BuildProviderUtils.cs
- TextAdaptor.cs
- MemberAccessException.cs
- MenuBindingsEditor.cs
- PerformanceCounterLib.cs
- DoubleLinkListEnumerator.cs
- SrgsOneOf.cs
- HttpException.cs
- BitmapSizeOptions.cs
- TabControlCancelEvent.cs
- ContextItemManager.cs
- MemberRelationshipService.cs
- WebControlsSection.cs
- CapabilitiesState.cs
- MergablePropertyAttribute.cs
- ControlHelper.cs
- _LoggingObject.cs
- PageBuildProvider.cs
- VirtualPath.cs
- ConfigXmlWhitespace.cs
- SymbolEqualComparer.cs
- ScalarConstant.cs
- ColorTransformHelper.cs
- _ConnectOverlappedAsyncResult.cs
- DataSetViewSchema.cs
- TreeNodeBinding.cs
- OpenTypeCommon.cs
- ItemsPanelTemplate.cs
- NumberAction.cs
- WebPartUserCapability.cs
- LinkUtilities.cs
- CustomCredentialPolicy.cs
- TrackingRecord.cs
- ReaderWriterLock.cs
- MenuItemStyle.cs
- AutoResetEvent.cs
- EndpointInfo.cs
- XsltArgumentList.cs
- BStrWrapper.cs
- RectKeyFrameCollection.cs
- ContainerVisual.cs
- Helpers.cs
- SafeRegistryKey.cs
- HealthMonitoringSectionHelper.cs
- Page.cs
- AssemblyUtil.cs