Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntityDesign / Design / System / Data / EntityModel / Emitters / AssociationTypeEmitter.cs / 1305376 / 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
- DataGridViewCellStateChangedEventArgs.cs
- ConversionContext.cs
- CancelEventArgs.cs
- SoapHeader.cs
- TabControlCancelEvent.cs
- StylusEditingBehavior.cs
- AssemblyName.cs
- ImageIndexEditor.cs
- AuthenticationException.cs
- DropDownList.cs
- DefaultValueTypeConverter.cs
- ICspAsymmetricAlgorithm.cs
- GenericTextProperties.cs
- ErrorLog.cs
- UpDownEvent.cs
- HttpContextWrapper.cs
- AsyncInvokeContext.cs
- ReadOnlyDictionary.cs
- CreateUserWizardStep.cs
- DuplicateWaitObjectException.cs
- SR.cs
- ApplicationManager.cs
- UInt32.cs
- StdRegProviderWrapper.cs
- PageBuildProvider.cs
- ContainerParagraph.cs
- FormatConvertedBitmap.cs
- DuplexClientBase.cs
- PtsHost.cs
- Matrix3DConverter.cs
- Region.cs
- SingleKeyFrameCollection.cs
- TransformDescriptor.cs
- ForeignKeyConstraint.cs
- CustomDictionarySources.cs
- ConfigurationElement.cs
- WebPartDescription.cs
- tibetanshape.cs
- ExpressionNode.cs
- AsyncPostBackTrigger.cs
- WorkflowRuntimeServiceElement.cs
- ReflectionServiceProvider.cs
- SvcMapFileLoader.cs
- Calendar.cs
- CaseInsensitiveHashCodeProvider.cs
- Keywords.cs
- BlurBitmapEffect.cs
- SHA1Managed.cs
- GeometryValueSerializer.cs
- SoapProtocolImporter.cs
- PersonalizablePropertyEntry.cs
- MappingException.cs
- Parsers.cs
- TableSectionStyle.cs
- EmbeddedMailObject.cs
- CommentEmitter.cs
- WindowsContainer.cs
- DataGridCaption.cs
- GridViewCommandEventArgs.cs
- ExpressionQuoter.cs
- RSATokenProvider.cs
- QilFunction.cs
- Buffer.cs
- WindowsPrincipal.cs
- WorkflowDefinitionDispenser.cs
- XmlSerializerSection.cs
- AutomationEventArgs.cs
- COMException.cs
- DbConnectionClosed.cs
- ContextQuery.cs
- LinqDataSourceContextEventArgs.cs
- KeyPressEvent.cs
- CellNormalizer.cs
- DocumentXPathNavigator.cs
- ObjectContext.cs
- MissingFieldException.cs
- TimeSpanValidatorAttribute.cs
- HandledEventArgs.cs
- LOSFormatter.cs
- DbConnectionFactory.cs
- CalendarDateRangeChangingEventArgs.cs
- ControlSerializer.cs
- TextFindEngine.cs
- AddInAdapter.cs
- WebPartCatalogAddVerb.cs
- ColorTranslator.cs
- HitTestResult.cs
- FloaterBaseParaClient.cs
- DnsPermission.cs
- BitmapEffectOutputConnector.cs
- ProvideValueServiceProvider.cs
- AnimationTimeline.cs
- HtmlControlPersistable.cs
- SqlCacheDependencyDatabase.cs
- FunctionDetailsReader.cs
- QilName.cs
- TdsParserSafeHandles.cs
- DataPagerFieldItem.cs
- cookie.cs
- TypeResolver.cs