Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Objects / objectresult_tresulttype.cs / 1 / 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 IBindingList _cachedBindingList;
internal ObjectResult(Shaper shaper, EntitySet singleEntitySet, TypeUsage resultItemType)
{
_shaper = shaper;
_reader = _shaper.Reader;
_singleEntitySet = singleEntitySet;
_resultItemType = resultItemType;
}
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)
{
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)
{
_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 IBindingList _cachedBindingList;
internal ObjectResult(Shaper shaper, EntitySet singleEntitySet, TypeUsage resultItemType)
{
_shaper = shaper;
_reader = _shaper.Reader;
_singleEntitySet = singleEntitySet;
_resultItemType = resultItemType;
}
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)
{
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)
{
_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
- Sentence.cs
- DPAPIProtectedConfigurationProvider.cs
- WebPartEditorCancelVerb.cs
- QilLiteral.cs
- UrlPropertyAttribute.cs
- XmlSchemaComplexContentExtension.cs
- Timer.cs
- XmlUTF8TextReader.cs
- ThreadExceptionEvent.cs
- ResolveMatches11.cs
- ByteStreamMessage.cs
- InputLanguage.cs
- SqlDataSourceCommandParser.cs
- EntityDataSourceDesigner.cs
- HtmlSelectionListAdapter.cs
- RemotingServices.cs
- WCFBuildProvider.cs
- PTConverter.cs
- WebPartAddingEventArgs.cs
- BuilderInfo.cs
- SerialStream.cs
- NamedPipeAppDomainProtocolHandler.cs
- METAHEADER.cs
- TextEditorLists.cs
- AppDomainInstanceProvider.cs
- PauseStoryboard.cs
- SoapTypeAttribute.cs
- FileStream.cs
- EntityProviderServices.cs
- OleDbCommandBuilder.cs
- X509Utils.cs
- DecimalConstantAttribute.cs
- CustomAttributeFormatException.cs
- RepeaterItem.cs
- XmlSchemaAnnotated.cs
- IdentityReference.cs
- ActivityExecutor.cs
- ConfigurationManagerInternalFactory.cs
- SrgsElementFactoryCompiler.cs
- TreeNodeCollectionEditor.cs
- CodeNamespaceImport.cs
- GlobalDataBindingHandler.cs
- SmiSettersStream.cs
- HtmlTitle.cs
- DataGridViewCellStateChangedEventArgs.cs
- CorruptingExceptionCommon.cs
- HScrollBar.cs
- FlowDocumentPage.cs
- HyperlinkAutomationPeer.cs
- Sql8ConformanceChecker.cs
- xamlnodes.cs
- ItemMap.cs
- DataGridColumnStyleMappingNameEditor.cs
- InstallerTypeAttribute.cs
- StringConcat.cs
- HelpKeywordAttribute.cs
- ResumeStoryboard.cs
- AuthorizationRule.cs
- ComponentEditorPage.cs
- OdbcStatementHandle.cs
- HyperLinkStyle.cs
- DataRowChangeEvent.cs
- XmlNullResolver.cs
- TagNameToTypeMapper.cs
- SvcMapFile.cs
- initElementDictionary.cs
- Directory.cs
- SmtpFailedRecipientsException.cs
- C14NUtil.cs
- ProcessHostMapPath.cs
- RegistryConfigurationProvider.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- TargetConverter.cs
- glyphs.cs
- SchemaImporterExtension.cs
- OneWayChannelListener.cs
- SchemaManager.cs
- Signature.cs
- MenuAdapter.cs
- CheckoutException.cs
- ListItemConverter.cs
- FlowNode.cs
- Rules.cs
- UserControlBuildProvider.cs
- ScriptingAuthenticationServiceSection.cs
- StickyNote.cs
- NameValueFileSectionHandler.cs
- Permission.cs
- EventToken.cs
- FormViewPagerRow.cs
- PropertyMapper.cs
- securitycriticaldata.cs
- ComponentChangedEvent.cs
- CellCreator.cs
- SubpageParagraph.cs
- OperationCanceledException.cs
- DependencyProperty.cs
- DataGridItem.cs
- dtdvalidator.cs
- ObjectIDGenerator.cs