Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Objects / objectresult_tresulttype.cs / 2 / 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 IEnumeratorGetEnumerator() { 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 IEnumeratorGetEnumerator() { 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
- WindowsTreeView.cs
- DataPagerCommandEventArgs.cs
- Models.cs
- RsaKeyIdentifierClause.cs
- NameValueConfigurationCollection.cs
- Atom10FormatterFactory.cs
- ProfilePropertySettingsCollection.cs
- SourceInterpreter.cs
- Exceptions.cs
- VisualTreeHelper.cs
- GridViewUpdateEventArgs.cs
- StructuredTypeEmitter.cs
- PasswordTextNavigator.cs
- GridViewPageEventArgs.cs
- IItemContainerGenerator.cs
- Pair.cs
- LabelAutomationPeer.cs
- BindingNavigator.cs
- CustomAttributeFormatException.cs
- RequestUriProcessor.cs
- DataTableNewRowEvent.cs
- XmlSchemaSet.cs
- ConnectionInterfaceCollection.cs
- TrackingRecordPreFilter.cs
- ObjectDataSourceDesigner.cs
- DataGridTableCollection.cs
- X509CertificateChain.cs
- ScrollItemPattern.cs
- JsonReader.cs
- Soap.cs
- CngProperty.cs
- clipboard.cs
- SqlCharStream.cs
- Axis.cs
- SiteMapNodeItem.cs
- ResolveResponse.cs
- WorkflowMarkupSerializationException.cs
- SynchronizedReadOnlyCollection.cs
- DragEvent.cs
- _NegoState.cs
- HeaderUtility.cs
- InitializerFacet.cs
- DynamicActivityTypeDescriptor.cs
- SafeRightsManagementHandle.cs
- GridViewColumnCollectionChangedEventArgs.cs
- __ComObject.cs
- MetaModel.cs
- WebServiceFaultDesigner.cs
- DataGridViewRow.cs
- PeerCollaboration.cs
- TableColumn.cs
- ManifestSignatureInformation.cs
- Logging.cs
- ColumnClickEvent.cs
- IListConverters.cs
- SqlDataRecord.cs
- ServiceHostingEnvironmentSection.cs
- NativeMethods.cs
- OracleBoolean.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- BridgeDataRecord.cs
- QuestionEventArgs.cs
- HtmlTable.cs
- ColorTranslator.cs
- ErrorRuntimeConfig.cs
- EntityAdapter.cs
- Table.cs
- SHA384.cs
- ResourceKey.cs
- SubclassTypeValidatorAttribute.cs
- CallbackException.cs
- SqlDataSourceStatusEventArgs.cs
- BuiltInExpr.cs
- EncoderParameter.cs
- SiteMapProvider.cs
- ListSourceHelper.cs
- ValueProviderWrapper.cs
- OdbcTransaction.cs
- XmlElementElement.cs
- CustomAttributeBuilder.cs
- CollectionViewGroupRoot.cs
- Odbc32.cs
- ValueSerializerAttribute.cs
- CodeAccessPermission.cs
- TypeDescriptor.cs
- WebSysDefaultValueAttribute.cs
- CompilationRelaxations.cs
- PreviewControlDesigner.cs
- OracleDataAdapter.cs
- WebScriptEndpointElement.cs
- TextTreeExtractElementUndoUnit.cs
- PaperSize.cs
- ProfileBuildProvider.cs
- InvalidFilterCriteriaException.cs
- WebBrowserNavigatedEventHandler.cs
- TransportOutputChannel.cs
- GenerateScriptTypeAttribute.cs
- MetadataArtifactLoaderCompositeFile.cs
- TagPrefixAttribute.cs
- SubpageParagraph.cs