Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Objects / objectresult_tresulttype.cs / 1305376 / objectresult_tresulttype.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupowner [....]
//---------------------------------------------------------------------
namespace System.Data.Objects
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.Metadata.Edm;
using System.Data.Mapping;
using System.Data.Objects.DataClasses;
using System.Diagnostics;
using System.Linq.Expressions;
using System.Data.Common.Internal.Materialization;
///
/// This class implements IEnumerable of T and IDisposable. Instance of this class
/// is returned from ObjectQuery<T>.Execute method.
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
public sealed class ObjectResult : ObjectResult, IEnumerable
{
private Shaper _shaper;
private DbDataReader _reader;
private readonly EntitySet _singleEntitySet;
private readonly TypeUsage _resultItemType;
private readonly bool _readerOwned;
private IBindingList _cachedBindingList;
internal ObjectResult(Shaper shaper, EntitySet singleEntitySet, TypeUsage resultItemType)
: this(shaper, singleEntitySet, resultItemType, true)
{
}
internal ObjectResult(Shaper shaper, EntitySet singleEntitySet, TypeUsage resultItemType, bool readerOwned)
{
_shaper = shaper;
_reader = _shaper.Reader;
_singleEntitySet = singleEntitySet;
_resultItemType = resultItemType;
_readerOwned = readerOwned;
}
private void EnsureCanEnumerateResults()
{
if (null == _shaper)
{
// Enumerating more than once is not allowed.
throw EntityUtil.CannotReEnumerateQueryResults();
}
}
///
/// Returns an enumerator that iterates through the collection.
///
public IEnumerator GetEnumerator()
{
EnsureCanEnumerateResults();
Shaper shaper = _shaper;
_shaper = null;
IEnumerator result = shaper.GetEnumerator();
return result;
}
///
/// Performs tasks associated with freeing, releasing, or resetting resources.
///
public override void Dispose()
{
DbDataReader reader = _reader;
_reader = null;
if (null != reader && _readerOwned)
{
reader.Dispose();
}
if (_shaper != null)
{
// This case includes when the ObjectResult is disposed before it
// created an ObjectQueryEnumeration; at this time, the connection can be released
if (_shaper.Context != null && _readerOwned)
{
_shaper.Context.ReleaseConnection();
}
_shaper = null;
}
}
internal override IEnumerator GetEnumeratorInternal()
{
return ((IEnumerable)this).GetEnumerator();
}
internal override IList GetIListSourceListInternal()
{
// You can only enumerate the query results once, and the creation of an ObjectView consumes this enumeration.
// However, there are situations where setting the DataSource of a control can result in multiple calls to this method.
// In order to enable this scenario and allow direct binding to the ObjectResult instance,
// the ObjectView is cached and returned on subsequent calls to this method.
if (_cachedBindingList == null)
{
EnsureCanEnumerateResults();
bool forceReadOnly = this._shaper.MergeOption == MergeOption.NoTracking;
_cachedBindingList = ObjectViewFactory.CreateViewForQuery(this._resultItemType, this, this._shaper.Context, forceReadOnly, this._singleEntitySet);
}
return _cachedBindingList;
}
public override Type ElementType
{
get { return typeof(T); }
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupowner [....]
//---------------------------------------------------------------------
namespace System.Data.Objects
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.Metadata.Edm;
using System.Data.Mapping;
using System.Data.Objects.DataClasses;
using System.Diagnostics;
using System.Linq.Expressions;
using System.Data.Common.Internal.Materialization;
///
/// This class implements IEnumerable of T and IDisposable. Instance of this class
/// is returned from ObjectQuery<T>.Execute method.
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
public sealed class ObjectResult : ObjectResult, IEnumerable
{
private Shaper _shaper;
private DbDataReader _reader;
private readonly EntitySet _singleEntitySet;
private readonly TypeUsage _resultItemType;
private readonly bool _readerOwned;
private IBindingList _cachedBindingList;
internal ObjectResult(Shaper shaper, EntitySet singleEntitySet, TypeUsage resultItemType)
: this(shaper, singleEntitySet, resultItemType, true)
{
}
internal ObjectResult(Shaper shaper, EntitySet singleEntitySet, TypeUsage resultItemType, bool readerOwned)
{
_shaper = shaper;
_reader = _shaper.Reader;
_singleEntitySet = singleEntitySet;
_resultItemType = resultItemType;
_readerOwned = readerOwned;
}
private void EnsureCanEnumerateResults()
{
if (null == _shaper)
{
// Enumerating more than once is not allowed.
throw EntityUtil.CannotReEnumerateQueryResults();
}
}
///
/// Returns an enumerator that iterates through the collection.
///
public IEnumerator GetEnumerator()
{
EnsureCanEnumerateResults();
Shaper shaper = _shaper;
_shaper = null;
IEnumerator result = shaper.GetEnumerator();
return result;
}
///
/// Performs tasks associated with freeing, releasing, or resetting resources.
///
public override void Dispose()
{
DbDataReader reader = _reader;
_reader = null;
if (null != reader && _readerOwned)
{
reader.Dispose();
}
if (_shaper != null)
{
// This case includes when the ObjectResult is disposed before it
// created an ObjectQueryEnumeration; at this time, the connection can be released
if (_shaper.Context != null && _readerOwned)
{
_shaper.Context.ReleaseConnection();
}
_shaper = null;
}
}
internal override IEnumerator GetEnumeratorInternal()
{
return ((IEnumerable)this).GetEnumerator();
}
internal override IList GetIListSourceListInternal()
{
// You can only enumerate the query results once, and the creation of an ObjectView consumes this enumeration.
// However, there are situations where setting the DataSource of a control can result in multiple calls to this method.
// In order to enable this scenario and allow direct binding to the ObjectResult instance,
// the ObjectView is cached and returned on subsequent calls to this method.
if (_cachedBindingList == null)
{
EnsureCanEnumerateResults();
bool forceReadOnly = this._shaper.MergeOption == MergeOption.NoTracking;
_cachedBindingList = ObjectViewFactory.CreateViewForQuery(this._resultItemType, this, this._shaper.Context, forceReadOnly, this._singleEntitySet);
}
return _cachedBindingList;
}
public override Type ElementType
{
get { return typeof(T); }
}
}
}
// 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
- NavigationPropertyEmitter.cs
- ContentType.cs
- BufferedGraphicsContext.cs
- EventHandlerService.cs
- SystemIPInterfaceStatistics.cs
- BaseParser.cs
- CollectionChangeEventArgs.cs
- UrlMappingCollection.cs
- CombinedHttpChannel.cs
- FieldDescriptor.cs
- XmlAttribute.cs
- PerformanceCounterPermissionAttribute.cs
- SmtpReplyReader.cs
- SocketElement.cs
- SecurityRuntime.cs
- IApplicationTrustManager.cs
- MemberAccessException.cs
- FamilyCollection.cs
- XPathNodeList.cs
- HTMLTextWriter.cs
- JsonDeserializer.cs
- PerformanceCounterPermissionEntry.cs
- ProtocolsConfigurationHandler.cs
- ContentFileHelper.cs
- CursorConverter.cs
- BatchServiceHost.cs
- TypeBuilder.cs
- Formatter.cs
- BaseTemplateBuildProvider.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ButtonBase.cs
- ZeroOpNode.cs
- Publisher.cs
- SchemaElementLookUpTableEnumerator.cs
- PropertyMapper.cs
- EncoderNLS.cs
- XmlSchemaValidator.cs
- AssemblyBuilder.cs
- Publisher.cs
- TileModeValidation.cs
- VersionConverter.cs
- ImageButton.cs
- HtmlEncodedRawTextWriter.cs
- TypedCompletedAsyncResult.cs
- StringKeyFrameCollection.cs
- assertwrapper.cs
- SqlDataSourceCache.cs
- CountAggregationOperator.cs
- cookie.cs
- LayoutEvent.cs
- PlaceHolder.cs
- LogRecordSequence.cs
- Visual3D.cs
- AppSettingsExpressionBuilder.cs
- SevenBitStream.cs
- DataGridViewTextBoxEditingControl.cs
- TreeNodeCollection.cs
- DBParameter.cs
- Scene3D.cs
- httpserverutility.cs
- BitmapEffect.cs
- MimeTypeMapper.cs
- Process.cs
- ThumbAutomationPeer.cs
- SevenBitStream.cs
- ServiceThrottlingElement.cs
- SafeNativeMethods.cs
- ListControlDesigner.cs
- DataGridViewAccessibleObject.cs
- ServiceReference.cs
- DataServiceHost.cs
- ApplicationFileCodeDomTreeGenerator.cs
- OracleParameterBinding.cs
- DynamicVirtualDiscoSearcher.cs
- DtcInterfaces.cs
- ListControl.cs
- BaseValidator.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- DataControlLinkButton.cs
- StateMachineSubscriptionManager.cs
- CompositeActivityTypeDescriptor.cs
- ToolStripSeparatorRenderEventArgs.cs
- PropertyEmitterBase.cs
- StylusPointPropertyUnit.cs
- ObjectDisposedException.cs
- CustomExpression.cs
- GroupItemAutomationPeer.cs
- XMLSyntaxException.cs
- ManualResetEvent.cs
- AssertFilter.cs
- followingquery.cs
- SortDescriptionCollection.cs
- StringFormat.cs
- SimpleTypesSurrogate.cs
- GroupByQueryOperator.cs
- RegexFCD.cs
- HotSpotCollection.cs
- DataGridViewCellStateChangedEventArgs.cs
- AddInAdapter.cs
- TemplateParser.cs