Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- AssociatedControlConverter.cs
- CursorConverter.cs
- OracleBoolean.cs
- AspNetHostingPermission.cs
- DataGridTextBox.cs
- BinaryFormatterWriter.cs
- Substitution.cs
- Set.cs
- DataObjectAttribute.cs
- KeyNotFoundException.cs
- DynamicResourceExtension.cs
- X509Certificate2Collection.cs
- WorkflowViewElement.cs
- APCustomTypeDescriptor.cs
- WebContext.cs
- DataStreamFromComStream.cs
- XMLSyntaxException.cs
- ChannelSinkStacks.cs
- LinearKeyFrames.cs
- PolygonHotSpot.cs
- WebPartConnection.cs
- ToolStripItemDesigner.cs
- isolationinterop.cs
- BooleanFacetDescriptionElement.cs
- ContextProperty.cs
- StorageAssociationSetMapping.cs
- MenuAutomationPeer.cs
- WebServiceTypeData.cs
- DataGridViewRowPrePaintEventArgs.cs
- FieldDescriptor.cs
- WinEventQueueItem.cs
- ServiceDesigner.xaml.cs
- OutputCacheProviderCollection.cs
- TraceListener.cs
- ActiveDocumentEvent.cs
- GeometryModel3D.cs
- FontFamily.cs
- EnumerableCollectionView.cs
- DataTable.cs
- DictionaryManager.cs
- NamespaceInfo.cs
- HyperlinkAutomationPeer.cs
- RegexCompiler.cs
- Opcode.cs
- DataGridHeaderBorder.cs
- ImageMetadata.cs
- ScopedMessagePartSpecification.cs
- AttachedAnnotationChangedEventArgs.cs
- RequestContext.cs
- OdbcRowUpdatingEvent.cs
- Pointer.cs
- UITypeEditor.cs
- CharacterBufferReference.cs
- formatter.cs
- HwndAppCommandInputProvider.cs
- WorkflowRuntimeElement.cs
- TimeSpanFormat.cs
- PrimaryKeyTypeConverter.cs
- EntityDesignerDataSourceView.cs
- SelectorAutomationPeer.cs
- ObjectIDGenerator.cs
- Oid.cs
- ConnectionStringSettingsCollection.cs
- TemplateBuilder.cs
- ScriptIgnoreAttribute.cs
- ObjectSet.cs
- BinaryUtilClasses.cs
- OdbcTransaction.cs
- TimeoutException.cs
- adornercollection.cs
- PeerReferralPolicy.cs
- SpnegoTokenProvider.cs
- MeasureItemEvent.cs
- InputDevice.cs
- IApplicationTrustManager.cs
- TargetException.cs
- UnauthorizedWebPart.cs
- StylusPointPropertyInfo.cs
- SystemFonts.cs
- RangeBaseAutomationPeer.cs
- XmlSerializer.cs
- ClientTargetSection.cs
- HtmlInputRadioButton.cs
- MessageRpc.cs
- NegationPusher.cs
- MemoryFailPoint.cs
- BuildProviderCollection.cs
- VisualStyleElement.cs
- SourceItem.cs
- GradientSpreadMethodValidation.cs
- TextChange.cs
- SafeViewOfFileHandle.cs
- MethodRental.cs
- UnsafeNativeMethods.cs
- XslAst.cs
- ListDictionaryInternal.cs
- DeploymentExceptionMapper.cs
- FontCacheUtil.cs
- InfoCardXmlSerializer.cs
- SecurityTokenSerializer.cs