Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- EntityDesignerUtils.cs
- ByteAnimation.cs
- DataGridViewRow.cs
- UniqueEventHelper.cs
- MappingModelBuildProvider.cs
- CompiledXpathExpr.cs
- GetResponse.cs
- SHA1Managed.cs
- Int32EqualityComparer.cs
- FileDetails.cs
- HScrollProperties.cs
- JoinElimination.cs
- ScrollChrome.cs
- SqlConnectionString.cs
- DataControlCommands.cs
- MsmqIntegrationMessageProperty.cs
- CodeConstructor.cs
- AnnotationResource.cs
- DependencyObjectPropertyDescriptor.cs
- Select.cs
- XsdDataContractImporter.cs
- StreamGeometry.cs
- PathFigureCollection.cs
- FlowDocumentReaderAutomationPeer.cs
- X500Name.cs
- ConcurrentBag.cs
- InplaceBitmapMetadataWriter.cs
- ConnectionManagementSection.cs
- FrameworkElement.cs
- DataBindingList.cs
- GlyphRunDrawing.cs
- Int16AnimationBase.cs
- WeakReference.cs
- DoubleCollectionConverter.cs
- IBuiltInEvidence.cs
- NamespaceEmitter.cs
- ClassicBorderDecorator.cs
- Container.cs
- GenericTypeParameterBuilder.cs
- SiblingIterators.cs
- VectorAnimationUsingKeyFrames.cs
- AdRotator.cs
- LineSegment.cs
- NamedElement.cs
- CodeSubDirectoriesCollection.cs
- BitmapCodecInfo.cs
- TransactionScope.cs
- EventManager.cs
- SpoolingTask.cs
- CharAnimationBase.cs
- HtmlLiteralTextAdapter.cs
- URL.cs
- Library.cs
- DataAccessException.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- OrderingInfo.cs
- ToggleButtonAutomationPeer.cs
- PublisherMembershipCondition.cs
- ImageFormat.cs
- HorizontalAlignConverter.cs
- ServiceHttpModule.cs
- XmlProcessingInstruction.cs
- CodeLabeledStatement.cs
- VectorAnimation.cs
- MulticastDelegate.cs
- DeviceContext2.cs
- processwaithandle.cs
- DataContractSerializerOperationFormatter.cs
- WindowsFormsHelpers.cs
- XamlGridLengthSerializer.cs
- ZipIOCentralDirectoryFileHeader.cs
- ButtonFlatAdapter.cs
- TableLayoutStyleCollection.cs
- Light.cs
- SqlDataSourceConfigureFilterForm.cs
- MimeParameter.cs
- ExpressionBindings.cs
- DeflateEmulationStream.cs
- MatrixStack.cs
- Matrix3D.cs
- EntityContainerAssociationSetEnd.cs
- DBCommand.cs
- ExtensionMethods.cs
- SqlBulkCopyColumnMappingCollection.cs
- Vector3DValueSerializer.cs
- CounterSample.cs
- autovalidator.cs
- IChannel.cs
- SerializationFieldInfo.cs
- ServerValidateEventArgs.cs
- BindingCollection.cs
- XmlDocumentType.cs
- X509IssuerSerialKeyIdentifierClause.cs
- AuthenticationModuleElement.cs
- AutomationFocusChangedEventArgs.cs
- UserControlCodeDomTreeGenerator.cs
- XmlWrappingWriter.cs
- DropSource.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- TemplatePropertyEntry.cs