Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Common / QueryCache / EntityClientCacheKey.cs / 2 / EntityClientCacheKey.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //----------------------------------------------------------------------------- namespace System.Data.Common.QueryCache { using System; using System.Collections.Generic; using System.Text; using System.Data.EntityClient; using System.Globalization; using System.Diagnostics; using System.Data.Metadata.Edm; ////// Represents EntityCommand Cache key context /// internal sealed class EntityClientCacheKey : QueryCacheKey { ////// Stored procedure or command text? /// readonly CommandType _commandType; ////// Entity Sql statement /// readonly string _eSqlStatement; ////// parameter collection token /// readonly string _parametersToken; ////// number of parameters /// readonly int _parameterCount; ////// Combined Hashcode based on component hashcodes /// readonly int _hashCode; ////// Creates a new instance of EntityClientCacheKey given a entityCommand instance /// /// internal EntityClientCacheKey(EntityCommand entityCommand) : base() { // Command Type _commandType = entityCommand.CommandType; // Statement _eSqlStatement = entityCommand.CommandText; // Parameters _parametersToken = GetParametersToken(entityCommand); _parameterCount = entityCommand.Parameters.Count; // Hashcode _hashCode = _commandType.GetHashCode() ^ _eSqlStatement.GetHashCode() ^ _parametersToken.GetHashCode(); } ////// determines equality of two cache keys based on cache context values /// /// ///public override bool Equals( object otherObject ) { Debug.Assert(null != otherObject, "otherObject must not be null"); if (typeof(EntityClientCacheKey) != otherObject.GetType()) { return false; } EntityClientCacheKey otherEntityClientCacheKey = (EntityClientCacheKey)otherObject; return (_commandType == otherEntityClientCacheKey._commandType && _parameterCount == otherEntityClientCacheKey._parameterCount) && Equals(otherEntityClientCacheKey._eSqlStatement, _eSqlStatement) && Equals(otherEntityClientCacheKey._parametersToken, _parametersToken); } /// /// Returns Context Hash Code /// ///public override int GetHashCode() { return _hashCode; } /// /// Returns a string representation of the parameter list /// /// ///private static string GetParametersToken(EntityCommand entityCommand) { if (null == entityCommand.Parameters || 0 == entityCommand.Parameters.Count) { // // means no parameters // return "@@0"; } else if (1 == entityCommand.Parameters.Count) { // if its one parameter only, there is no need to use stringbuilder Dictionary paramTypeUsage = entityCommand.GetParameterTypeUsage(); Debug.Assert(paramTypeUsage.Count == entityCommand.Parameters.Count, "entityParameter collection and query parameter collection must have the same number of entries"); return "@@1:" + entityCommand.Parameters[0].ParameterName + ":" + paramTypeUsage[entityCommand.Parameters[0].ParameterName].EdmType.FullName; } else { StringBuilder sb = new StringBuilder(entityCommand.Parameters.Count * EstimatedParameterStringSize); Dictionary paramTypeUsage = entityCommand.GetParameterTypeUsage(); Debug.Assert(paramTypeUsage.Count == entityCommand.Parameters.Count, "entityParameter collection and query parameter collection must have the same number of entries"); sb.Append("@@"); sb.Append(entityCommand.Parameters.Count); sb.Append(":"); string separator = ""; foreach (KeyValuePair param in paramTypeUsage) { sb.Append(separator); sb.Append(param.Key); sb.Append(":"); sb.Append(param.Value.EdmType.FullName); separator = ";"; } return sb.ToString(); } } /// /// returns the composed cache key /// ///public override string ToString() { return String.Join("|", new string[] { Enum.GetName(typeof(CommandType), _commandType), _eSqlStatement, _parametersToken }); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //----------------------------------------------------------------------------- namespace System.Data.Common.QueryCache { using System; using System.Collections.Generic; using System.Text; using System.Data.EntityClient; using System.Globalization; using System.Diagnostics; using System.Data.Metadata.Edm; ////// Represents EntityCommand Cache key context /// internal sealed class EntityClientCacheKey : QueryCacheKey { ////// Stored procedure or command text? /// readonly CommandType _commandType; ////// Entity Sql statement /// readonly string _eSqlStatement; ////// parameter collection token /// readonly string _parametersToken; ////// number of parameters /// readonly int _parameterCount; ////// Combined Hashcode based on component hashcodes /// readonly int _hashCode; ////// Creates a new instance of EntityClientCacheKey given a entityCommand instance /// /// internal EntityClientCacheKey(EntityCommand entityCommand) : base() { // Command Type _commandType = entityCommand.CommandType; // Statement _eSqlStatement = entityCommand.CommandText; // Parameters _parametersToken = GetParametersToken(entityCommand); _parameterCount = entityCommand.Parameters.Count; // Hashcode _hashCode = _commandType.GetHashCode() ^ _eSqlStatement.GetHashCode() ^ _parametersToken.GetHashCode(); } ////// determines equality of two cache keys based on cache context values /// /// ///public override bool Equals( object otherObject ) { Debug.Assert(null != otherObject, "otherObject must not be null"); if (typeof(EntityClientCacheKey) != otherObject.GetType()) { return false; } EntityClientCacheKey otherEntityClientCacheKey = (EntityClientCacheKey)otherObject; return (_commandType == otherEntityClientCacheKey._commandType && _parameterCount == otherEntityClientCacheKey._parameterCount) && Equals(otherEntityClientCacheKey._eSqlStatement, _eSqlStatement) && Equals(otherEntityClientCacheKey._parametersToken, _parametersToken); } /// /// Returns Context Hash Code /// ///public override int GetHashCode() { return _hashCode; } /// /// Returns a string representation of the parameter list /// /// ///private static string GetParametersToken(EntityCommand entityCommand) { if (null == entityCommand.Parameters || 0 == entityCommand.Parameters.Count) { // // means no parameters // return "@@0"; } else if (1 == entityCommand.Parameters.Count) { // if its one parameter only, there is no need to use stringbuilder Dictionary paramTypeUsage = entityCommand.GetParameterTypeUsage(); Debug.Assert(paramTypeUsage.Count == entityCommand.Parameters.Count, "entityParameter collection and query parameter collection must have the same number of entries"); return "@@1:" + entityCommand.Parameters[0].ParameterName + ":" + paramTypeUsage[entityCommand.Parameters[0].ParameterName].EdmType.FullName; } else { StringBuilder sb = new StringBuilder(entityCommand.Parameters.Count * EstimatedParameterStringSize); Dictionary paramTypeUsage = entityCommand.GetParameterTypeUsage(); Debug.Assert(paramTypeUsage.Count == entityCommand.Parameters.Count, "entityParameter collection and query parameter collection must have the same number of entries"); sb.Append("@@"); sb.Append(entityCommand.Parameters.Count); sb.Append(":"); string separator = ""; foreach (KeyValuePair param in paramTypeUsage) { sb.Append(separator); sb.Append(param.Key); sb.Append(":"); sb.Append(param.Value.EdmType.FullName); separator = ";"; } return sb.ToString(); } } /// /// returns the composed cache key /// ///public override string ToString() { return String.Join("|", new string[] { Enum.GetName(typeof(CommandType), _commandType), _eSqlStatement, _parametersToken }); } } } // 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
- ConfigurationSection.cs
- SmtpAuthenticationManager.cs
- CompositeActivityCodeGenerator.cs
- DynamicDiscoSearcher.cs
- SubclassTypeValidator.cs
- BitmapEffectState.cs
- StubHelpers.cs
- DataGridBoolColumn.cs
- KeyedHashAlgorithm.cs
- PropertyDescriptors.cs
- TabItemAutomationPeer.cs
- PrimitiveType.cs
- PageCatalogPart.cs
- WebPartTransformerCollection.cs
- XmlParser.cs
- OleStrCAMarshaler.cs
- HeaderFilter.cs
- HyperLink.cs
- BinaryWriter.cs
- FormViewCommandEventArgs.cs
- DateTime.cs
- ClientSponsor.cs
- CryptoConfig.cs
- ProviderConnectionPoint.cs
- StateFinalizationActivity.cs
- TouchEventArgs.cs
- DataGridViewCellMouseEventArgs.cs
- FlatButtonAppearance.cs
- WinFormsSecurity.cs
- Int32CollectionValueSerializer.cs
- RegisteredScript.cs
- ZipIOExtraField.cs
- NextPreviousPagerField.cs
- AsyncResult.cs
- StoreAnnotationsMap.cs
- TextDataBindingHandler.cs
- FixedNode.cs
- SharedUtils.cs
- HierarchicalDataBoundControl.cs
- TraceProvider.cs
- Bezier.cs
- TemplateBindingExtensionConverter.cs
- FragmentQueryKB.cs
- ProfileGroupSettingsCollection.cs
- XmlImplementation.cs
- DirectionalLight.cs
- CompositeFontParser.cs
- FixedLineResult.cs
- ExpressionPrefixAttribute.cs
- WindowsEditBox.cs
- EmbeddedMailObject.cs
- SqlComparer.cs
- connectionpool.cs
- FrameworkElementFactory.cs
- XsdCachingReader.cs
- SoapCodeExporter.cs
- XamlClipboardData.cs
- CompositeActivityMarkupSerializer.cs
- PropertyItemInternal.cs
- DrawingImage.cs
- FixedSOMElement.cs
- BinaryObjectWriter.cs
- EventMappingSettingsCollection.cs
- RuntimeHandles.cs
- Point3DCollection.cs
- NegotiateStream.cs
- BaseCAMarshaler.cs
- CodeCastExpression.cs
- MarginCollapsingState.cs
- WebControl.cs
- XmlSerializerVersionAttribute.cs
- DataGridRelationshipRow.cs
- AspCompat.cs
- Rectangle.cs
- BitmapEffectGroup.cs
- ScrollEventArgs.cs
- TextElementAutomationPeer.cs
- DelegateHelpers.cs
- SqlTriggerAttribute.cs
- Themes.cs
- CredentialSelector.cs
- AdjustableArrowCap.cs
- ConsoleCancelEventArgs.cs
- LocatorPart.cs
- PagerSettings.cs
- DataRowComparer.cs
- TabletDeviceInfo.cs
- AdornerHitTestResult.cs
- HandlerBase.cs
- ListBindingHelper.cs
- CommonRemoteMemoryBlock.cs
- Oci.cs
- BitmapInitialize.cs
- NetworkCredential.cs
- ExeContext.cs
- OdbcInfoMessageEvent.cs
- DeferredRunTextReference.cs
- EdmItemError.cs
- XamlWriter.cs
- ToolStripItemCollection.cs