Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceWrapperCollection.cs / 1305376 / EntityDataSourceWrapperCollection.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections;
using System.ComponentModel;
using System.Collections.Generic;
using System.Data.Metadata.Edm;
using System.Data.Mapping;
using System.Data.Objects;
using System.Reflection;
using System.Diagnostics;
using System.Data.Common;
using System.Data.Objects.DataClasses;
using System.Globalization;
using System.Data.EntityClient;
using System.Collections.ObjectModel;
namespace System.Web.UI.WebControls
{
///
/// Summary description for EntityDataSourceWrapperCollection
///
internal class EntityDataSourceWrapperCollection : IEnumerable, ICollection, ITypedList
{
private readonly ObjectContext _context;
private readonly List _wrapperList;
///
/// Gets the property descriptors exposed to the user.
///
private readonly PropertyDescriptorCollection _visiblePropertyDescriptors;
///
/// Gets all property descriptors.
///
internal readonly ReadOnlyCollection AllPropertyDescriptors;
private readonly bool _isReadOnly;
private readonly Type _clrEntityType;
internal EntityDataSourceWrapperCollection(ObjectContext context, EntitySet entitySet, EntityType restrictedEntityType)
{
EntityDataSourceUtil.CheckArgumentNull(context, "context");
EntityDataSourceUtil.CheckArgumentNull(entitySet, "entitySet");
_context = context;
_wrapperList = new List();
// get handles on the relevant workspaces
MetadataWorkspace csWorkspace = ((EntityConnection)context.Connection).GetMetadataWorkspace();
MetadataWorkspace ocWorkspace = context.MetadataWorkspace;
// if no restricted type is given, we assume the entity set element type is exposed
EntityType entityType = restrictedEntityType ?? entitySet.ElementType;
_clrEntityType = EntityDataSourceUtil.GetClrType(ocWorkspace, entityType);
// if no restricted type is given and the set is polymorphic, make the collection readonly
if (null == restrictedEntityType &&
1 < EntityDataSourceUtil.GetTypeAndSubtypesOf(entityType, csWorkspace.GetItemCollection(DataSpace.CSpace), true).Count())
{
_isReadOnly = true;
}
// gather the properties
Type componentType = EntityDataSourceUtil.GetClrType(context.MetadataWorkspace, entityType);
ReadOnlyCollection columns = EntityDataSourceUtil.GetNamedColumns(csWorkspace, ocWorkspace, entitySet, entityType);
List visiblePropertyDescriptors = new List(columns.Count);
List propertyDescriptors = new List(columns.Count);
foreach (EntityDataSourceColumn column in columns)
{
var descriptor = new EntityDataSourceWrapperPropertyDescriptor(this, column);
propertyDescriptors.Add(descriptor);
// if the descriptor does not have a dependent, it is exposed to the user
if (!descriptor.Column.IsHidden)
{
visiblePropertyDescriptors.Add(descriptor);
}
}
_visiblePropertyDescriptors = new PropertyDescriptorCollection(visiblePropertyDescriptors.ToArray(), true);
AllPropertyDescriptors = propertyDescriptors.AsReadOnly();
}
internal EntityDataSourceWrapper AddWrappedEntity(object entity)
{
EntityDataSourceWrapper wrapper = new EntityDataSourceWrapper(this, entity);
this._wrapperList.Add(wrapper);
return wrapper;
}
#region IEnumerable Implementation
IEnumerator IEnumerable.GetEnumerator()
{
return this._wrapperList.GetEnumerator();
}
#endregion IEnumerable Implementation
#region ICollection Implementation
public int Count
{
get { return this._wrapperList.Count; }
}
public void CopyTo(Array array, int index)
{
((ICollection)this._wrapperList).CopyTo(array, index);
}
public bool IsSynchronized
{
get { return false; }
}
public object SyncRoot
{
get { return null; }
}
#endregion
#region ITypedList Implementation
public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors)
{
if (null == listAccessors)
{
return this._visiblePropertyDescriptors ;
}
else
{
return null;// Implement this feature when we support traversing collections.
}
}
string ITypedList.GetListName(PropertyDescriptor[] listAccessors)
{
return null;
}
#endregion
#region Internal properties
///
/// Gets CLR type or base type for entities exposed in this collection.
///
internal Type ClrEntityType
{
get { return _clrEntityType; }
}
///
/// Indicates whether this configuration supports modifications.
///
internal bool IsReadOnly
{
get { return _isReadOnly; }
}
///
/// Gets object context tracking the contents of this collection.
///
internal ObjectContext Context
{
get { return _context; }
}
#endregion
}
}
// 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
- ImageButton.cs
- BinHexDecoder.cs
- QueryCacheManager.cs
- RawStylusInputCustomData.cs
- BooleanProjectedSlot.cs
- LedgerEntryCollection.cs
- ListViewGroupItemCollection.cs
- PathParser.cs
- MeshGeometry3D.cs
- EdmRelationshipRoleAttribute.cs
- Type.cs
- Expr.cs
- XmlBinaryReaderSession.cs
- TypePresenter.xaml.cs
- StringInfo.cs
- TextRangeProviderWrapper.cs
- UIPermission.cs
- WebConfigurationManager.cs
- RootBrowserWindowProxy.cs
- WorkflowInstanceUnhandledExceptionRecord.cs
- WebExceptionStatus.cs
- Pen.cs
- ToolTip.cs
- ClientSession.cs
- Timer.cs
- XamlToRtfWriter.cs
- MbpInfo.cs
- MarshalByRefObject.cs
- SymLanguageVendor.cs
- SharedUtils.cs
- SqlNotificationRequest.cs
- ExpandCollapseProviderWrapper.cs
- TableCell.cs
- SecurityTokenSpecification.cs
- RuntimeHelpers.cs
- AmbientLight.cs
- PeerNearMe.cs
- IWorkflowDebuggerService.cs
- Triplet.cs
- WpfSharedXamlSchemaContext.cs
- FormsAuthentication.cs
- EncoderBestFitFallback.cs
- SynchronizationHandlesCodeDomSerializer.cs
- ConfigurationManagerHelperFactory.cs
- StylusDownEventArgs.cs
- FunctionDescription.cs
- GroupLabel.cs
- Stack.cs
- XmlSortKeyAccumulator.cs
- DummyDataSource.cs
- ConfigurationStrings.cs
- XmlBufferReader.cs
- ObsoleteAttribute.cs
- ExpanderAutomationPeer.cs
- BuildProvider.cs
- TextContainerChangeEventArgs.cs
- CreateUserWizard.cs
- WebPartTransformerCollection.cs
- FileLogRecordEnumerator.cs
- DynamicFilterExpression.cs
- FieldNameLookup.cs
- SqlDataReaderSmi.cs
- Matrix3D.cs
- ApplicationDirectoryMembershipCondition.cs
- TextEditorSpelling.cs
- SafeCancelMibChangeNotify.cs
- ScaleTransform.cs
- UtilityExtension.cs
- SerialPinChanges.cs
- TextLineBreak.cs
- ModifierKeysValueSerializer.cs
- DataGridViewCellValueEventArgs.cs
- DetailsViewInsertEventArgs.cs
- Dispatcher.cs
- SafeArrayTypeMismatchException.cs
- DbProviderFactory.cs
- QilStrConcatenator.cs
- PseudoWebRequest.cs
- BitmapSource.cs
- SecurityDescriptor.cs
- OdbcError.cs
- OuterGlowBitmapEffect.cs
- _SafeNetHandles.cs
- DataGrid.cs
- ZoneLinkButton.cs
- CompiledXpathExpr.cs
- ListViewInsertEventArgs.cs
- HtmlTable.cs
- SafeArchiveContext.cs
- Opcode.cs
- WCFModelStrings.Designer.cs
- TextElementCollection.cs
- XmlMtomReader.cs
- Axis.cs
- WindowsFont.cs
- TraceHandler.cs
- CertificateManager.cs
- ValidationEventArgs.cs
- ToolboxComponentsCreatedEventArgs.cs
- BmpBitmapDecoder.cs