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
- MatrixKeyFrameCollection.cs
- VersionPair.cs
- SiteMapHierarchicalDataSourceView.cs
- Thread.cs
- MeshGeometry3D.cs
- EmissiveMaterial.cs
- OledbConnectionStringbuilder.cs
- BaseValidatorDesigner.cs
- ExpandSegmentCollection.cs
- DataGridViewRowCollection.cs
- TextTreeNode.cs
- CompiledQuery.cs
- PasswordBox.cs
- ChainedAsyncResult.cs
- WorkflowShape.cs
- NamespaceCollection.cs
- DummyDataSource.cs
- TextElementEnumerator.cs
- ConfigurationValues.cs
- ZipIOBlockManager.cs
- ToolboxItemWrapper.cs
- GeometryHitTestParameters.cs
- DockAndAnchorLayout.cs
- GeneralTransform3D.cs
- DynamicValidatorEventArgs.cs
- ContextQuery.cs
- RuntimeEnvironment.cs
- Cursor.cs
- SystemInfo.cs
- ControlCachePolicy.cs
- StateMachineWorkflowDesigner.cs
- DoubleConverter.cs
- LinearKeyFrames.cs
- CalendarTable.cs
- keycontainerpermission.cs
- InputElement.cs
- FileChangesMonitor.cs
- AsyncPostBackTrigger.cs
- PlatformCulture.cs
- VideoDrawing.cs
- IBuiltInEvidence.cs
- TagPrefixAttribute.cs
- GeometryCollection.cs
- DoubleAnimationClockResource.cs
- TextRangeAdaptor.cs
- ComponentEvent.cs
- CreateUserWizardStep.cs
- InputChannel.cs
- Executor.cs
- QueryOutputWriter.cs
- CopyAction.cs
- XamlParser.cs
- QuotaThrottle.cs
- CreateUserWizardAutoFormat.cs
- ReliableSession.cs
- ReadOnlyHierarchicalDataSourceView.cs
- TcpTransportSecurity.cs
- AstTree.cs
- COM2PictureConverter.cs
- OptionUsage.cs
- Point3DAnimation.cs
- ModelTreeEnumerator.cs
- DataServiceQuery.cs
- TemplateControlParser.cs
- MultiTrigger.cs
- OletxDependentTransaction.cs
- DatatypeImplementation.cs
- ArrangedElementCollection.cs
- SystemColors.cs
- DataGridItem.cs
- DialogResultConverter.cs
- Hashtable.cs
- TypeDescriptionProviderAttribute.cs
- ViewEventArgs.cs
- Variant.cs
- Keyboard.cs
- ContentTypeSettingClientMessageFormatter.cs
- CounterSetInstanceCounterDataSet.cs
- EntitySetRetriever.cs
- AdornerLayer.cs
- BufferedResponseStream.cs
- ImageField.cs
- ProxyDataContractResolver.cs
- TokenBasedSet.cs
- UserControl.cs
- ClusterRegistryConfigurationProvider.cs
- ActivityPreviewDesigner.cs
- CopyEncoder.cs
- XmlSchemaAttribute.cs
- SdlChannelSink.cs
- XmlSchemaValidator.cs
- Sql8ExpressionRewriter.cs
- SQLInt64Storage.cs
- LeaseManager.cs
- PersianCalendar.cs
- XmlProcessingInstruction.cs
- SqlEnums.cs
- EntityDataSourceDataSelection.cs
- precedingsibling.cs
- StyleModeStack.cs