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
- TextRunCacheImp.cs
- FunctionParameter.cs
- ProfileGroupSettingsCollection.cs
- HtmlInputImage.cs
- TextChange.cs
- WebPartDescription.cs
- BinaryObjectWriter.cs
- SplitterPanelDesigner.cs
- DataGridViewAccessibleObject.cs
- WebBrowserProgressChangedEventHandler.cs
- EditingScope.cs
- _AutoWebProxyScriptWrapper.cs
- _PooledStream.cs
- EventInfo.cs
- SystemIPv4InterfaceProperties.cs
- SerializerWriterEventHandlers.cs
- ImmComposition.cs
- _emptywebproxy.cs
- SmtpCommands.cs
- DrawListViewItemEventArgs.cs
- EventPropertyMap.cs
- DataColumnMapping.cs
- TimeManager.cs
- basemetadatamappingvisitor.cs
- DataGridRow.cs
- LassoSelectionBehavior.cs
- OutputCacheModule.cs
- TableCellAutomationPeer.cs
- Invariant.cs
- TerminatorSinks.cs
- LazyInitializer.cs
- GraphicsContext.cs
- HitTestResult.cs
- StylusPointDescription.cs
- BaseParagraph.cs
- BinHexEncoding.cs
- DbConnectionInternal.cs
- ZipIOLocalFileDataDescriptor.cs
- Compiler.cs
- VisualTreeUtils.cs
- XPathQilFactory.cs
- Parser.cs
- ReadOnlyHierarchicalDataSource.cs
- RepeatBehaviorConverter.cs
- Identifier.cs
- CodeNamespaceImport.cs
- ClipboardProcessor.cs
- ConnectionOrientedTransportChannelListener.cs
- UrlAuthFailedErrorFormatter.cs
- WebPartAddingEventArgs.cs
- DataFormat.cs
- VarRemapper.cs
- Package.cs
- GenerateHelper.cs
- BindableAttribute.cs
- UnSafeCharBuffer.cs
- TreeViewEvent.cs
- DropSource.cs
- ParameterCollection.cs
- Size.cs
- Expressions.cs
- ButtonPopupAdapter.cs
- MetabaseServerConfig.cs
- CalloutQueueItem.cs
- WebBrowserEvent.cs
- User.cs
- TraceFilter.cs
- XamlStream.cs
- XmlSchemaSimpleTypeUnion.cs
- StringUtil.cs
- WmlTextBoxAdapter.cs
- FileUpload.cs
- GeneralTransform3DTo2DTo3D.cs
- Update.cs
- AppDomainFactory.cs
- OdbcTransaction.cs
- MiniConstructorInfo.cs
- JsonEncodingStreamWrapper.cs
- DesignerCatalogPartChrome.cs
- SqlConnectionFactory.cs
- PixelFormats.cs
- TabPage.cs
- AtomMaterializerLog.cs
- XmlSerializationGeneratedCode.cs
- ReflectTypeDescriptionProvider.cs
- ActiveXHelper.cs
- AuthenticationModuleElement.cs
- RemoveStoryboard.cs
- CodeLabeledStatement.cs
- LayoutDump.cs
- TcpProcessProtocolHandler.cs
- ProcessModuleDesigner.cs
- TableCell.cs
- Trace.cs
- ACL.cs
- NavigationWindow.cs
- SafeEventHandle.cs
- DataSourceXmlClassAttribute.cs
- SmtpSection.cs
- CfgSemanticTag.cs