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
- GenericAuthenticationEventArgs.cs
- HttpVersion.cs
- RandomNumberGenerator.cs
- PropertyGridEditorPart.cs
- WorkflowTimerService.cs
- Substitution.cs
- WindowsFormsHostAutomationPeer.cs
- userdatakeys.cs
- BaseDataBoundControl.cs
- WebConfigurationManager.cs
- ServicePointManagerElement.cs
- PermissionListSet.cs
- RuntimeVariablesExpression.cs
- RegisteredScript.cs
- AnonymousIdentificationSection.cs
- TreeNodeBindingCollection.cs
- TimeSpanValidatorAttribute.cs
- CellCreator.cs
- CheckBox.cs
- VisualStyleTypesAndProperties.cs
- X509Certificate2.cs
- WebBrowserHelper.cs
- TerminateWorkflow.cs
- ConstructorArgumentAttribute.cs
- TimeoutException.cs
- ColorConvertedBitmap.cs
- TemplateColumn.cs
- KeyValuePair.cs
- MachineKeySection.cs
- HtmlTableRowCollection.cs
- Variant.cs
- ListBoxItem.cs
- CancelRequestedRecord.cs
- CatalogPartDesigner.cs
- Panel.cs
- AssemblyCache.cs
- SqlAggregateChecker.cs
- MSHTMLHostUtil.cs
- CompilerTypeWithParams.cs
- SamlAuthenticationClaimResource.cs
- NamespaceQuery.cs
- PassportIdentity.cs
- UIElement3D.cs
- MaterialGroup.cs
- MailWriter.cs
- HtmlInputControl.cs
- OleDbError.cs
- OperatingSystem.cs
- x509store.cs
- AccessibilityApplicationManager.cs
- XPathAncestorQuery.cs
- PixelShader.cs
- CompositeCollection.cs
- StrokeNodeOperations.cs
- DataGridViewColumnConverter.cs
- COAUTHIDENTITY.cs
- CellCreator.cs
- VerticalAlignConverter.cs
- ByteConverter.cs
- PublisherIdentityPermission.cs
- CommandTreeTypeHelper.cs
- ExpressionHelper.cs
- HandleRef.cs
- SyndicationContent.cs
- ScriptControlDescriptor.cs
- TypeListConverter.cs
- SimpleExpression.cs
- GradientStop.cs
- ProcessThreadDesigner.cs
- ViewEvent.cs
- VolatileResourceManager.cs
- WebRequestModuleElementCollection.cs
- DropDownList.cs
- WindowsToolbarItemAsMenuItem.cs
- CodeArgumentReferenceExpression.cs
- WeakReferenceList.cs
- MarkupObject.cs
- WindowsSidIdentity.cs
- List.cs
- PositiveTimeSpanValidator.cs
- EventDescriptorCollection.cs
- Source.cs
- XmlSerializerNamespaces.cs
- QilTypeChecker.cs
- UntrustedRecipientException.cs
- SQLGuid.cs
- TitleStyle.cs
- BindableTemplateBuilder.cs
- TemplateControlParser.cs
- UnsafeNetInfoNativeMethods.cs
- BoundPropertyEntry.cs
- CorrelationToken.cs
- DeleteHelper.cs
- HttpGetProtocolReflector.cs
- Timer.cs
- Int32CollectionConverter.cs
- PlatformCulture.cs
- Point4DConverter.cs
- X509Utils.cs
- PrintDialogException.cs