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
- AtomMaterializerLog.cs
- MediaPlayerState.cs
- StylusButtonEventArgs.cs
- DesignerFrame.cs
- TypeUnloadedException.cs
- DbgUtil.cs
- ColumnWidthChangedEvent.cs
- DelimitedListTraceListener.cs
- AnnotationAdorner.cs
- ResourceWriter.cs
- CodeDomSerializerException.cs
- Object.cs
- BaseValidator.cs
- CircleEase.cs
- ChtmlCalendarAdapter.cs
- ContainerUIElement3D.cs
- MenuItemBinding.cs
- NamespaceEmitter.cs
- SendingRequestEventArgs.cs
- wgx_exports.cs
- xmlglyphRunInfo.cs
- LocationReferenceValue.cs
- FileDialog_Vista_Interop.cs
- XmlRawWriter.cs
- OutgoingWebResponseContext.cs
- XmlSchemaAll.cs
- DataKey.cs
- LocalizableAttribute.cs
- dsa.cs
- Asn1IntegerConverter.cs
- TimeoutHelper.cs
- RepeaterItem.cs
- ellipse.cs
- MergePropertyDescriptor.cs
- UrlMappingsSection.cs
- CharacterHit.cs
- WebPartActionVerb.cs
- SelectionListDesigner.cs
- ManagementPath.cs
- DataGridViewCheckBoxCell.cs
- Parser.cs
- Renderer.cs
- TextClipboardData.cs
- DisplayMemberTemplateSelector.cs
- SmtpNegotiateAuthenticationModule.cs
- InertiaTranslationBehavior.cs
- ProxyBuilder.cs
- TypeSystemProvider.cs
- ObjectTag.cs
- PropertyEmitterBase.cs
- ColumnPropertiesGroup.cs
- GenericUriParser.cs
- _ListenerRequestStream.cs
- Triplet.cs
- ValidatorCompatibilityHelper.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- UnknownWrapper.cs
- HMACSHA384.cs
- DbConnectionPoolIdentity.cs
- storepermission.cs
- DateTimeParse.cs
- LocalizableResourceBuilder.cs
- ReferencedAssembly.cs
- EventLogPermissionHolder.cs
- PenContext.cs
- Publisher.cs
- TextEditorSelection.cs
- TransactionBridgeSection.cs
- GatewayDefinition.cs
- Site.cs
- AttributeEmitter.cs
- BinarySerializer.cs
- UnsafeNativeMethods.cs
- XmlWhitespace.cs
- CheckBoxFlatAdapter.cs
- InfoCardService.cs
- WorkItem.cs
- TabControl.cs
- SemanticAnalyzer.cs
- TcpProcessProtocolHandler.cs
- _CacheStreams.cs
- Root.cs
- PropertyPushdownHelper.cs
- EndPoint.cs
- TextTreeFixupNode.cs
- BoolLiteral.cs
- EventLogger.cs
- TranslateTransform.cs
- AuthenticationException.cs
- RequiredAttributeAttribute.cs
- KeyEvent.cs
- StaticSiteMapProvider.cs
- FileClassifier.cs
- MonitoringDescriptionAttribute.cs
- EntityDataSourceDataSelection.cs
- BuiltInPermissionSets.cs
- XmlWriterTraceListener.cs
- ContainsRowNumberChecker.cs
- DatagramAdapter.cs
- DBDataPermissionAttribute.cs