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
- ListCommandEventArgs.cs
- GrammarBuilderWildcard.cs
- QuaternionRotation3D.cs
- ObservableDictionary.cs
- RightsManagementEncryptionTransform.cs
- ProtectedProviderSettings.cs
- BulletChrome.cs
- UIAgentMonitor.cs
- TracingConnectionInitiator.cs
- RectKeyFrameCollection.cs
- RequiredFieldValidator.cs
- NewArrayExpression.cs
- ActivityExecutor.cs
- ObjectRef.cs
- ProxyAttribute.cs
- CodeEntryPointMethod.cs
- WindowsPrincipal.cs
- HtmlLiteralTextAdapter.cs
- TargetParameterCountException.cs
- ReadOnlyState.cs
- UniqueConstraint.cs
- DataStreams.cs
- AppDomain.cs
- BlobPersonalizationState.cs
- SerializationSectionGroup.cs
- WebUtil.cs
- ZoneIdentityPermission.cs
- StandardToolWindows.cs
- HttpApplication.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- InputElement.cs
- StorageComplexTypeMapping.cs
- TypeUsageBuilder.cs
- WindowsUpDown.cs
- UInt16Converter.cs
- OrthographicCamera.cs
- SchemaDeclBase.cs
- WebPartVerbsEventArgs.cs
- input.cs
- DomNameTable.cs
- TimerElapsedEvenArgs.cs
- XmlEncodedRawTextWriter.cs
- AppDomainProtocolHandler.cs
- XPathDocumentIterator.cs
- ExtensionQuery.cs
- DbParameterCollection.cs
- TextPenaltyModule.cs
- EntityContainerAssociationSetEnd.cs
- GraphicsPath.cs
- ToolStrip.cs
- AttachedPropertyInfo.cs
- SerializationAttributes.cs
- EntityDataSourceChangingEventArgs.cs
- DateTimeFormat.cs
- SessionState.cs
- HMACRIPEMD160.cs
- PageTheme.cs
- CollectionViewGroupRoot.cs
- Attributes.cs
- ObjectStateEntry.cs
- StackOverflowException.cs
- Query.cs
- KeyboardNavigation.cs
- ComponentResourceKeyConverter.cs
- RoleService.cs
- SessionSwitchEventArgs.cs
- TreeWalker.cs
- GetLedgerRequest.cs
- SvcFileManager.cs
- VBCodeProvider.cs
- Expression.cs
- CompressedStack.cs
- MailAddressCollection.cs
- OrderByQueryOptionExpression.cs
- XmlExpressionDumper.cs
- ipaddressinformationcollection.cs
- CommonObjectSecurity.cs
- XmlAggregates.cs
- AlignmentXValidation.cs
- TextDecorationCollectionConverter.cs
- GenericQueueSurrogate.cs
- GridViewHeaderRowPresenter.cs
- CodeEntryPointMethod.cs
- XmlDocumentFragment.cs
- MetadataItem.cs
- VersionedStream.cs
- PerfCounterSection.cs
- MonthChangedEventArgs.cs
- UpdateProgress.cs
- __Error.cs
- SessionStateItemCollection.cs
- ConditionalWeakTable.cs
- ConfigXmlReader.cs
- DirectoryGroupQuery.cs
- IisTraceListener.cs
- WebPartCatalogCloseVerb.cs
- MimeXmlReflector.cs
- StateMachineExecutionState.cs
- Button.cs
- DataGridHelper.cs