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
- ImageSource.cs
- DrawListViewSubItemEventArgs.cs
- PieceDirectory.cs
- ErrorFormatter.cs
- RepeaterItemEventArgs.cs
- Visual3D.cs
- PageEventArgs.cs
- CompilerResults.cs
- SystemInformation.cs
- NotCondition.cs
- ConfigurationLocation.cs
- RevocationPoint.cs
- StateChangeEvent.cs
- WinInetCache.cs
- TreeViewItemAutomationPeer.cs
- AnchoredBlock.cs
- Geometry.cs
- CngProvider.cs
- CmsUtils.cs
- COM2ExtendedUITypeEditor.cs
- AsnEncodedData.cs
- ParserStreamGeometryContext.cs
- RefExpr.cs
- DtdParser.cs
- XpsLiterals.cs
- SelectionBorderGlyph.cs
- HitTestDrawingContextWalker.cs
- ManagedCodeMarkers.cs
- IItemContainerGenerator.cs
- EntityCollection.cs
- SqlIdentifier.cs
- LightweightCodeGenerator.cs
- CompilerResults.cs
- HtmlInputControl.cs
- Pair.cs
- SystemIPInterfaceProperties.cs
- UnionExpr.cs
- FormViewDeletedEventArgs.cs
- CqlWriter.cs
- indexingfiltermarshaler.cs
- safelinkcollection.cs
- MLangCodePageEncoding.cs
- SessionStateModule.cs
- ZipIOExtraFieldElement.cs
- XmlSchemaDatatype.cs
- TokenFactoryBase.cs
- FormParameter.cs
- XmlUtilWriter.cs
- ToolStripGrip.cs
- RtType.cs
- MethodImplAttribute.cs
- StatusBarItemAutomationPeer.cs
- NonVisualControlAttribute.cs
- MaskInputRejectedEventArgs.cs
- ClientReliableChannelBinder.cs
- ToolStripDropDownButton.cs
- DefaultObjectMappingItemCollection.cs
- DynamicAttribute.cs
- FixedFindEngine.cs
- GridViewHeaderRowPresenter.cs
- EntityParameterCollection.cs
- HMACSHA512.cs
- ServiceCredentialsSecurityTokenManager.cs
- TreePrinter.cs
- ISCIIEncoding.cs
- WebPartConnectionsDisconnectVerb.cs
- PrintDocument.cs
- StringToken.cs
- ValueTable.cs
- TraceEventCache.cs
- PipelineModuleStepContainer.cs
- BmpBitmapEncoder.cs
- CookielessHelper.cs
- HMACSHA512.cs
- ReceiveMessageAndVerifySecurityAsyncResultBase.cs
- VerificationException.cs
- ImportContext.cs
- EmbeddedMailObjectsCollection.cs
- Int64Storage.cs
- FixedSOMFixedBlock.cs
- ControlPaint.cs
- ExpressionBuilder.cs
- LocalizableResourceBuilder.cs
- MailMessageEventArgs.cs
- DiscoveryDocument.cs
- HelpEvent.cs
- LongMinMaxAggregationOperator.cs
- VScrollProperties.cs
- Misc.cs
- MaterialGroup.cs
- SoapSchemaExporter.cs
- Lasso.cs
- NotificationContext.cs
- BoundsDrawingContextWalker.cs
- ExpressionPrinter.cs
- SessionChannels.cs
- BamlResourceSerializer.cs
- StrokeDescriptor.cs
- CodeAttachEventStatement.cs
- ImplicitInputBrush.cs