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
- ResumeStoryboard.cs
- DataGridViewCheckBoxCell.cs
- XmlSchemaSimpleType.cs
- DrawingServices.cs
- XsdCachingReader.cs
- PrintPreviewControl.cs
- ManagementDateTime.cs
- SectionRecord.cs
- MouseEventArgs.cs
- DecoderBestFitFallback.cs
- WorkflowItemsPresenter.cs
- ISAPIWorkerRequest.cs
- PeerMessageDispatcher.cs
- RootBrowserWindow.cs
- PreloadedPackages.cs
- ExpanderAutomationPeer.cs
- ToggleButton.cs
- ToolStripScrollButton.cs
- AssemblyInfo.cs
- TypeLoadException.cs
- CompilerResults.cs
- COM2PropertyBuilderUITypeEditor.cs
- SettingsSavedEventArgs.cs
- EncryptedReference.cs
- XsltSettings.cs
- InvokeMethod.cs
- Int16.cs
- SessionStateModule.cs
- XmlNamespaceMapping.cs
- RadialGradientBrush.cs
- InProcStateClientManager.cs
- ObjectSpanRewriter.cs
- DSASignatureDeformatter.cs
- ListControlConvertEventArgs.cs
- Selection.cs
- UpdateManifestForBrowserApplication.cs
- ProcessThreadCollection.cs
- DeclaredTypeValidator.cs
- DBNull.cs
- RandomNumberGenerator.cs
- BehaviorEditorPart.cs
- DataGridState.cs
- PersonalizationDictionary.cs
- Panel.cs
- UInt64Converter.cs
- DebugController.cs
- Win32MouseDevice.cs
- FormsAuthenticationModule.cs
- ProvidersHelper.cs
- WebPartCatalogAddVerb.cs
- HttpFileCollectionWrapper.cs
- TypographyProperties.cs
- TreeViewEvent.cs
- JulianCalendar.cs
- SmtpNtlmAuthenticationModule.cs
- WriteTimeStream.cs
- DelayedRegex.cs
- StandardMenuStripVerb.cs
- FileSecurity.cs
- BasicBrowserDialog.designer.cs
- Point4D.cs
- StopStoryboard.cs
- ArgumentsParser.cs
- Char.cs
- Binding.cs
- RC2CryptoServiceProvider.cs
- DataGridPageChangedEventArgs.cs
- SqlSupersetValidator.cs
- SqlCharStream.cs
- AccessText.cs
- SafeCryptContextHandle.cs
- ScaleTransform3D.cs
- RightsController.cs
- FixedSOMGroup.cs
- CodeAttributeDeclarationCollection.cs
- SizeKeyFrameCollection.cs
- MatrixValueSerializer.cs
- EmptyStringExpandableObjectConverter.cs
- StreamGeometryContext.cs
- TempFiles.cs
- CapabilitiesSection.cs
- RuntimeHelpers.cs
- GreenMethods.cs
- StateManagedCollection.cs
- TransactedReceiveData.cs
- sqlinternaltransaction.cs
- ArrangedElement.cs
- ImportStoreException.cs
- DataSourceControl.cs
- ResourceBinder.cs
- MenuItemBindingCollection.cs
- MediaSystem.cs
- XsltContext.cs
- ConfigXmlComment.cs
- StateRuntime.cs
- InstallerTypeAttribute.cs
- MemberInfoSerializationHolder.cs
- DrawingContextWalker.cs
- CodeStatement.cs
- MarkupExtensionReturnTypeAttribute.cs