Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / DiscriminatorMap.cs / 1305376 / DiscriminatorMap.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Data.Common.CommandTrees; using System.Data.Common.CommandTrees.Internal; using System.Collections.Generic; using System.Data.Metadata.Edm; using System.Linq; using System.Globalization; using System.Diagnostics; using System.Data.Common.Utils; namespace System.Data.Mapping.ViewGeneration { ////// Describes top-level query mapping view projection of the form: /// /// SELECT VALUE CASE /// WHEN Discriminator = DiscriminatorValue1 THEN EntityType1(...) /// WHEN Discriminator = DiscriminatorValue2 THEN EntityType2(...) /// ... /// /// Supports optimizing queries to leverage user supplied discriminator values /// in TPH mappings rather than introducing our own. This avoids the need /// to introduce a CASE statement in the store. /// internal class DiscriminatorMap { ////// Expression retrieving discriminator value from projection input. /// internal readonly DbPropertyExpression Discriminator; ////// Map from discriminator values to implied entity type. /// internal readonly System.Collections.ObjectModel.ReadOnlyCollection> TypeMap; /// /// Map from entity property to expression generating value for that property. Note that /// the expression must be the same for all types in discriminator map. /// internal readonly System.Collections.ObjectModel.ReadOnlyCollection> PropertyMap; /// /// Map from entity relproperty to expression generating value for that property. Note that /// the expression must be the same for all types in discriminator map. /// internal readonly System.Collections.ObjectModel.ReadOnlyCollection> RelPropertyMap; /// /// EntitySet to which the map applies. /// internal readonly EntitySet EntitySet; private DiscriminatorMap(DbPropertyExpression discriminator, List> typeMap, Dictionary propertyMap, Dictionary relPropertyMap, EntitySet entitySet) { this.Discriminator = discriminator; this.TypeMap = typeMap.AsReadOnly(); this.PropertyMap = propertyMap.ToList().AsReadOnly(); this.RelPropertyMap = relPropertyMap.ToList().AsReadOnly(); this.EntitySet = entitySet; } /// /// Determines whether the given query view matches the discriminator map pattern. /// internal static bool TryCreateDiscriminatorMap(EntitySet entitySet, DbExpression queryView, out DiscriminatorMap discriminatorMap) { discriminatorMap = null; if (queryView.ExpressionKind != DbExpressionKind.Project) { return false; } var project = (DbProjectExpression)queryView; if (project.Projection.ExpressionKind != DbExpressionKind.Case) { return false; } var caseExpression = (DbCaseExpression)project.Projection; if (project.Projection.ResultType.EdmType.BuiltInTypeKind != BuiltInTypeKind.EntityType) { return false; } // determine value domain by walking filter if (project.Input.Expression.ExpressionKind != DbExpressionKind.Filter) { return false; } var filterExpression = (DbFilterExpression)project.Input.Expression; HashSet
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EventNotify.cs
- Emitter.cs
- TextCollapsingProperties.cs
- PersonalizationStateInfo.cs
- CuspData.cs
- HttpModuleAction.cs
- XmlUtilWriter.cs
- Simplifier.cs
- IndentedTextWriter.cs
- PropertyGridEditorPart.cs
- ServiceObjectContainer.cs
- TargetParameterCountException.cs
- ValueTypeFixupInfo.cs
- Convert.cs
- ScriptRegistrationManager.cs
- StickyNoteAnnotations.cs
- HtmlInputCheckBox.cs
- SafeProcessHandle.cs
- SendingRequestEventArgs.cs
- BoolLiteral.cs
- Normalization.cs
- GeneratedCodeAttribute.cs
- StringStorage.cs
- DoubleAnimationUsingKeyFrames.cs
- WebPartDisplayModeCancelEventArgs.cs
- WinEventTracker.cs
- WindowsSecurityToken.cs
- PasswordTextContainer.cs
- EncoderBestFitFallback.cs
- WebPartUtil.cs
- WebCodeGenerator.cs
- DbConnectionStringCommon.cs
- HtmlShimManager.cs
- CaseStatementSlot.cs
- TemplateLookupAction.cs
- PointUtil.cs
- SchemaNames.cs
- Message.cs
- DesignRelation.cs
- ComponentEditorPage.cs
- GridViewSelectEventArgs.cs
- ColorConvertedBitmap.cs
- CryptographicAttribute.cs
- BaseValidatorDesigner.cs
- ComponentChangedEvent.cs
- xdrvalidator.cs
- QilFunction.cs
- DisplayToken.cs
- PlacementWorkspace.cs
- DocumentViewerBase.cs
- CheckBoxField.cs
- TimerEventSubscriptionCollection.cs
- CompModSwitches.cs
- TrackingMemoryStreamFactory.cs
- SecurityState.cs
- XmlAnyElementAttributes.cs
- CodeTypeReferenceSerializer.cs
- MetadataCache.cs
- DoubleLinkListEnumerator.cs
- EventLogPermissionEntry.cs
- DataService.cs
- CatalogPartChrome.cs
- StatementContext.cs
- TextBoxBase.cs
- DataGridViewCellValueEventArgs.cs
- DecoderNLS.cs
- XPathNodeList.cs
- Polyline.cs
- HeaderedItemsControl.cs
- WorkflowInstanceQuery.cs
- FileEnumerator.cs
- StyleSheetDesigner.cs
- DWriteFactory.cs
- DataViewManager.cs
- XmlWrappingReader.cs
- XamlPoint3DCollectionSerializer.cs
- LicenseContext.cs
- FileDataSourceCache.cs
- DelegatingTypeDescriptionProvider.cs
- ArgumentNullException.cs
- TraceSwitch.cs
- ExpressionSelection.cs
- GridView.cs
- GeneralTransform3D.cs
- Ipv6Element.cs
- LazyTextWriterCreator.cs
- GetLedgerRequest.cs
- Literal.cs
- RuntimeResourceSet.cs
- MimeTypePropertyAttribute.cs
- HtmlInputRadioButton.cs
- DSACryptoServiceProvider.cs
- DataRowExtensions.cs
- HttpValueCollection.cs
- CriticalExceptions.cs
- ReachVisualSerializer.cs
- SwitchLevelAttribute.cs
- WebPartCloseVerb.cs
- dsa.cs
- WindowsContainer.cs