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
- LinkClickEvent.cs
- CommandLibraryHelper.cs
- DataPagerFieldItem.cs
- HttpHeaderCollection.cs
- SystemResources.cs
- EdmRelationshipRoleAttribute.cs
- X509CertificateChain.cs
- ServiceRouteHandler.cs
- BoolExpr.cs
- XmlDataSource.cs
- SchemaHelper.cs
- TryLoadRunnableWorkflowCommand.cs
- PassportIdentity.cs
- StringValueConverter.cs
- StringUtil.cs
- HtmlTableCell.cs
- BuildProvider.cs
- ConfigXmlAttribute.cs
- COM2FontConverter.cs
- DataTableNewRowEvent.cs
- DataSourceXmlTextReader.cs
- DataServiceEntityAttribute.cs
- CompiledQuery.cs
- ToggleButtonAutomationPeer.cs
- DataRecord.cs
- PriorityChain.cs
- DelegateTypeInfo.cs
- DrawingState.cs
- OutOfMemoryException.cs
- DataObjectAttribute.cs
- XmlRootAttribute.cs
- GroupDescription.cs
- SecurityManager.cs
- OleDbParameter.cs
- StatusBarDesigner.cs
- AttachedAnnotation.cs
- ResourceExpression.cs
- Cursor.cs
- VectorConverter.cs
- DynamicControlParameter.cs
- GridViewColumnCollection.cs
- Help.cs
- LineGeometry.cs
- WindowsListViewGroupSubsetLink.cs
- EmptyControlCollection.cs
- DeferredSelectedIndexReference.cs
- GridViewDeletedEventArgs.cs
- NativeMethods.cs
- BooleanAnimationUsingKeyFrames.cs
- BinHexEncoding.cs
- ThreadExceptionEvent.cs
- BufferedWebEventProvider.cs
- Journaling.cs
- MulticastDelegate.cs
- UnionExpr.cs
- ExpressionBinding.cs
- ImpersonateTokenRef.cs
- InstanceStore.cs
- UIElementAutomationPeer.cs
- TextElementCollectionHelper.cs
- DragDropManager.cs
- Win32.cs
- WebBrowser.cs
- DashStyles.cs
- DataGridViewToolTip.cs
- IDispatchConstantAttribute.cs
- XPathEmptyIterator.cs
- MenuItemCollection.cs
- SpellerInterop.cs
- BackStopAuthenticationModule.cs
- XslTransform.cs
- NodeFunctions.cs
- GraphicsContainer.cs
- RenderData.cs
- DataSourceGeneratorException.cs
- OverflowException.cs
- CompositeDataBoundControl.cs
- TranslateTransform3D.cs
- Style.cs
- TabletDevice.cs
- TextStore.cs
- DockPattern.cs
- ReadOnlyHierarchicalDataSourceView.cs
- XamlPathDataSerializer.cs
- HatchBrush.cs
- InputMethodStateTypeInfo.cs
- CopyOnWriteList.cs
- LifetimeMonitor.cs
- XsdCachingReader.cs
- SqlTransaction.cs
- FlowLayout.cs
- FacetValueContainer.cs
- ExecutionContext.cs
- Command.cs
- DbExpressionVisitor_TResultType.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- FormatterConverter.cs
- DataGridPreparingCellForEditEventArgs.cs
- BrowserCapabilitiesCompiler.cs
- BuildProvider.cs