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
- CompiledQueryCacheKey.cs
- DateTimeFormat.cs
- EnumerableRowCollectionExtensions.cs
- InstancePersistenceContext.cs
- RenderTargetBitmap.cs
- ButtonRenderer.cs
- RPIdentityRequirement.cs
- ADConnectionHelper.cs
- ColorIndependentAnimationStorage.cs
- SqlNodeAnnotations.cs
- PropertyNames.cs
- MdiWindowListStrip.cs
- Pair.cs
- HttpProtocolReflector.cs
- ProtocolsConfigurationEntry.cs
- BoundsDrawingContextWalker.cs
- XmlImplementation.cs
- UserControlParser.cs
- CodeCommentStatement.cs
- XamlRtfConverter.cs
- ComplexType.cs
- XmlDocumentSchema.cs
- StringAnimationBase.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- WebReferencesBuildProvider.cs
- SHA1.cs
- ArrayHelper.cs
- UserControl.cs
- followingquery.cs
- CancelRequestedQuery.cs
- WebPartDisplayModeCollection.cs
- MaterialGroup.cs
- AttributeProviderAttribute.cs
- StringDictionaryEditor.cs
- HandlerBase.cs
- FixedTextView.cs
- NamedPipeTransportManager.cs
- MatrixConverter.cs
- SymmetricKeyWrap.cs
- DataListDesigner.cs
- StringAnimationBase.cs
- CheckPair.cs
- XXXOnTypeBuilderInstantiation.cs
- ListViewItem.cs
- CodeGen.cs
- SafeEventHandle.cs
- SqlCommandBuilder.cs
- RadialGradientBrush.cs
- Size3DConverter.cs
- CodeTypeParameter.cs
- SHA256Cng.cs
- AutoResizedEvent.cs
- XmlSecureResolver.cs
- StoreItemCollection.Loader.cs
- RegistryHandle.cs
- AnnotationResourceChangedEventArgs.cs
- Win32.cs
- Command.cs
- XmlQueryStaticData.cs
- WebServiceEnumData.cs
- PropertyItem.cs
- OleDbPermission.cs
- ContainsSearchOperator.cs
- Utils.cs
- DrawingGroup.cs
- ACE.cs
- XmlRootAttribute.cs
- XMLSchema.cs
- ImageSourceConverter.cs
- SmiMetaData.cs
- WebResourceAttribute.cs
- DateTimeOffsetStorage.cs
- TimelineGroup.cs
- DataListItemEventArgs.cs
- JapaneseCalendar.cs
- CommonDialog.cs
- WebBrowserSiteBase.cs
- NameValueConfigurationElement.cs
- DummyDataSource.cs
- ConditionalAttribute.cs
- SourceFileBuildProvider.cs
- UnmanagedMemoryStream.cs
- ScopedKnownTypes.cs
- ImagingCache.cs
- WmfPlaceableFileHeader.cs
- EventProviderWriter.cs
- EpmSyndicationContentSerializer.cs
- ProtocolImporter.cs
- MD5CryptoServiceProvider.cs
- ExpressionConverter.cs
- CopyCodeAction.cs
- MailMessage.cs
- HtmlImageAdapter.cs
- DesignerAdRotatorAdapter.cs
- Enum.cs
- SqlCacheDependencyDatabaseCollection.cs
- StubHelpers.cs
- ContentElementCollection.cs
- RectValueSerializer.cs
- IndentTextWriter.cs