Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / UI / WebControls / ContextDataSourceView.cs / 1305376 / ContextDataSourceView.cs
#if ORYX_VNEXT namespace Microsoft.Web.Data.UI.WebControls { #else namespace System.Web.UI.WebControls { #endif using System; using System.Collections; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Security.Permissions; using System.Web; using System.Web.Compilation; using System.Web.UI; public abstract class ContextDataSourceView : QueryableDataSourceView { private string _entitySetName; private string _contextTypeName; private Type _contextType; private string _entityTypeName; private Type _entityType; private Type _entitySetType; private Control _owner; protected static readonly object EventContextCreating = new object(); protected static readonly object EventContextCreated = new object(); protected static readonly object EventContextDisposing = new object(); protected ContextDataSourceView(DataSourceControl owner, string viewName, HttpContext context) : base(owner, viewName, context) { _owner = owner; } internal ContextDataSourceView(DataSourceControl owner, string viewName, HttpContext context, IDynamicQueryable queryable) : base(owner, viewName, context, queryable) { } public string EntitySetName { get { return _entitySetName ?? String.Empty; } set { if (_entitySetName != value) { _entitySetName = value; _entitySetType = null; OnDataSourceViewChanged(EventArgs.Empty); } } } public string EntityTypeName { get { return _entityTypeName ?? String.Empty; } set { if (_entityTypeName != value) { _entityTypeName = value; _entityType = null; OnDataSourceViewChanged(EventArgs.Empty); } } } protected override Type EntityType { get { string typeName = EntityTypeName; if (_entityType == null) { _entityType = GetDataObjectTypeByName(typeName) ?? GetDataObjectType(EntitySetType); } return _entityType; } } public virtual string ContextTypeName { get { return _contextTypeName ?? String.Empty; } set { if (_contextTypeName != value) { _contextTypeName = value; _contextType = null; OnDataSourceViewChanged(EventArgs.Empty); } } } public virtual Type ContextType { get { if (_contextType == null && !String.IsNullOrEmpty(ContextTypeName)) { _contextType = DataSourceHelper.GetType(ContextTypeName); } return _contextType; } } ////// Current Context /// protected object Context { get; set; } ////// Current EntitySet /// protected object EntitySet { get; private set; } [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods", Justification = "The result of GetEntitySetType() is cached unless the EntitySetTypeName changes.")] protected Type EntitySetType { get { if (_entitySetType == null) { _entitySetType = GetEntitySetType(); } return _entitySetType; } } // Default implementation assumes the EntitySet is a property or field of the Context protected virtual Type GetEntitySetType() { MemberInfo mi = GetEntitySetMember(ContextType); if (mi.MemberType == MemberTypes.Property) { return ((PropertyInfo)mi).PropertyType; } else if (mi.MemberType == MemberTypes.Field) { return ((FieldInfo)mi).FieldType; } // throw new InvalidOperationException("EntitySet Type must be a field or property"); } private MemberInfo GetEntitySetMember(Type contextType) { string entitySetTypeName = EntitySetName; if (String.IsNullOrEmpty(entitySetTypeName)) { // return null; } MemberInfo[] members = contextType.FindMembers(MemberTypes.Field | MemberTypes.Property, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, /*filter*/null, /*filterCriteria*/null); for (int i = 0; i < members.Length; i++) { if (String.Equals(members[i].Name, entitySetTypeName, StringComparison.OrdinalIgnoreCase)) { return members[i]; } } return null; } private static Type GetDataObjectTypeByName(string typeName) { Type entityType = null; if (!String.IsNullOrEmpty(typeName)) { entityType = BuildManager.GetType(typeName, /*throwOnFail*/ false, /*ignoreCase*/ true); } return entityType; } protected virtual Type GetDataObjectType(Type type) { if (type.IsGenericType) { Type[] genericTypes = type.GetGenericArguments(); if (genericTypes.Length == 1) { return genericTypes[0]; } } // return typeof(object); } protected virtual ContextDataSourceContextData CreateContext(DataSourceOperation operation) { return null; } protected override object GetSource(QueryContext context) { ContextDataSourceContextData contextData = CreateContext(DataSourceOperation.Select); if (contextData != null) { // Set the current context Context = contextData.Context; EntitySet = contextData.EntitySet; return EntitySet; } return null; } protected override int ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) { ContextDataSourceContextData contextData = null; try { contextData = CreateContext(DataSourceOperation.Update); if (contextData != null) { // Set the current context Context = contextData.Context; EntitySet = contextData.EntitySet; return base.ExecuteUpdate(keys, values, oldValues); } } finally { DisposeContext(); } return -1; } protected override int ExecuteDelete(IDictionary keys, IDictionary oldValues) { ContextDataSourceContextData contextData = null; try { contextData = CreateContext(DataSourceOperation.Delete); if (contextData != null) { // Set the current context Context = contextData.Context; EntitySet = contextData.EntitySet; return base.ExecuteDelete(keys, oldValues); } } finally { DisposeContext(); } return -1; } protected override int ExecuteInsert(IDictionary values) { ContextDataSourceContextData contextData = null; try { contextData = CreateContext(DataSourceOperation.Insert); if (contextData != null) { // Set the current context Context = contextData.Context; EntitySet = contextData.EntitySet; return base.ExecuteInsert(values); } } finally { DisposeContext(); } return -1; } protected virtual void DisposeContext(object dataContext) { if (dataContext != null) { IDisposable disposableObject = dataContext as IDisposable; if (disposableObject != null) { disposableObject.Dispose(); } dataContext = null; } } protected void DisposeContext() { DisposeContext(Context); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. #if ORYX_VNEXT namespace Microsoft.Web.Data.UI.WebControls { #else namespace System.Web.UI.WebControls { #endif using System; using System.Collections; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Security.Permissions; using System.Web; using System.Web.Compilation; using System.Web.UI; public abstract class ContextDataSourceView : QueryableDataSourceView { private string _entitySetName; private string _contextTypeName; private Type _contextType; private string _entityTypeName; private Type _entityType; private Type _entitySetType; private Control _owner; protected static readonly object EventContextCreating = new object(); protected static readonly object EventContextCreated = new object(); protected static readonly object EventContextDisposing = new object(); protected ContextDataSourceView(DataSourceControl owner, string viewName, HttpContext context) : base(owner, viewName, context) { _owner = owner; } internal ContextDataSourceView(DataSourceControl owner, string viewName, HttpContext context, IDynamicQueryable queryable) : base(owner, viewName, context, queryable) { } public string EntitySetName { get { return _entitySetName ?? String.Empty; } set { if (_entitySetName != value) { _entitySetName = value; _entitySetType = null; OnDataSourceViewChanged(EventArgs.Empty); } } } public string EntityTypeName { get { return _entityTypeName ?? String.Empty; } set { if (_entityTypeName != value) { _entityTypeName = value; _entityType = null; OnDataSourceViewChanged(EventArgs.Empty); } } } protected override Type EntityType { get { string typeName = EntityTypeName; if (_entityType == null) { _entityType = GetDataObjectTypeByName(typeName) ?? GetDataObjectType(EntitySetType); } return _entityType; } } public virtual string ContextTypeName { get { return _contextTypeName ?? String.Empty; } set { if (_contextTypeName != value) { _contextTypeName = value; _contextType = null; OnDataSourceViewChanged(EventArgs.Empty); } } } public virtual Type ContextType { get { if (_contextType == null && !String.IsNullOrEmpty(ContextTypeName)) { _contextType = DataSourceHelper.GetType(ContextTypeName); } return _contextType; } } ////// Current Context /// protected object Context { get; set; } ////// Current EntitySet /// protected object EntitySet { get; private set; } [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods", Justification = "The result of GetEntitySetType() is cached unless the EntitySetTypeName changes.")] protected Type EntitySetType { get { if (_entitySetType == null) { _entitySetType = GetEntitySetType(); } return _entitySetType; } } // Default implementation assumes the EntitySet is a property or field of the Context protected virtual Type GetEntitySetType() { MemberInfo mi = GetEntitySetMember(ContextType); if (mi.MemberType == MemberTypes.Property) { return ((PropertyInfo)mi).PropertyType; } else if (mi.MemberType == MemberTypes.Field) { return ((FieldInfo)mi).FieldType; } // throw new InvalidOperationException("EntitySet Type must be a field or property"); } private MemberInfo GetEntitySetMember(Type contextType) { string entitySetTypeName = EntitySetName; if (String.IsNullOrEmpty(entitySetTypeName)) { // return null; } MemberInfo[] members = contextType.FindMembers(MemberTypes.Field | MemberTypes.Property, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, /*filter*/null, /*filterCriteria*/null); for (int i = 0; i < members.Length; i++) { if (String.Equals(members[i].Name, entitySetTypeName, StringComparison.OrdinalIgnoreCase)) { return members[i]; } } return null; } private static Type GetDataObjectTypeByName(string typeName) { Type entityType = null; if (!String.IsNullOrEmpty(typeName)) { entityType = BuildManager.GetType(typeName, /*throwOnFail*/ false, /*ignoreCase*/ true); } return entityType; } protected virtual Type GetDataObjectType(Type type) { if (type.IsGenericType) { Type[] genericTypes = type.GetGenericArguments(); if (genericTypes.Length == 1) { return genericTypes[0]; } } // return typeof(object); } protected virtual ContextDataSourceContextData CreateContext(DataSourceOperation operation) { return null; } protected override object GetSource(QueryContext context) { ContextDataSourceContextData contextData = CreateContext(DataSourceOperation.Select); if (contextData != null) { // Set the current context Context = contextData.Context; EntitySet = contextData.EntitySet; return EntitySet; } return null; } protected override int ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) { ContextDataSourceContextData contextData = null; try { contextData = CreateContext(DataSourceOperation.Update); if (contextData != null) { // Set the current context Context = contextData.Context; EntitySet = contextData.EntitySet; return base.ExecuteUpdate(keys, values, oldValues); } } finally { DisposeContext(); } return -1; } protected override int ExecuteDelete(IDictionary keys, IDictionary oldValues) { ContextDataSourceContextData contextData = null; try { contextData = CreateContext(DataSourceOperation.Delete); if (contextData != null) { // Set the current context Context = contextData.Context; EntitySet = contextData.EntitySet; return base.ExecuteDelete(keys, oldValues); } } finally { DisposeContext(); } return -1; } protected override int ExecuteInsert(IDictionary values) { ContextDataSourceContextData contextData = null; try { contextData = CreateContext(DataSourceOperation.Insert); if (contextData != null) { // Set the current context Context = contextData.Context; EntitySet = contextData.EntitySet; return base.ExecuteInsert(values); } } finally { DisposeContext(); } return -1; } protected virtual void DisposeContext(object dataContext) { if (dataContext != null) { IDisposable disposableObject = dataContext as IDisposable; if (disposableObject != null) { disposableObject.Dispose(); } dataContext = null; } } protected void DisposeContext() { DisposeContext(Context); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InputMethod.cs
- AnnotationHelper.cs
- LoadedOrUnloadedOperation.cs
- DocumentOrderComparer.cs
- ControlEvent.cs
- Int64AnimationUsingKeyFrames.cs
- DbgUtil.cs
- GeometryGroup.cs
- TextEditorTables.cs
- CollectionBuilder.cs
- XmlWrappingReader.cs
- MessageSecurityOverMsmq.cs
- OperationResponse.cs
- DependencyPropertyKey.cs
- util.cs
- XamlStyleSerializer.cs
- CodeDelegateCreateExpression.cs
- IPipelineRuntime.cs
- ControlCollection.cs
- RequestCacheManager.cs
- XmlSchemaSimpleContentExtension.cs
- WindowHideOrCloseTracker.cs
- OracleInfoMessageEventArgs.cs
- TextParagraphProperties.cs
- DefaultHttpHandler.cs
- AssemblyUtil.cs
- HMACSHA1.cs
- XhtmlBasicLabelAdapter.cs
- WindowsServiceCredential.cs
- SocketSettings.cs
- FormViewInsertedEventArgs.cs
- PropertyEmitterBase.cs
- DynamicRenderer.cs
- HttpCacheVary.cs
- DataGridViewCellStyleConverter.cs
- CollectionView.cs
- ObjectDataSourceDisposingEventArgs.cs
- QuadraticBezierSegment.cs
- DataListItem.cs
- CodeIndexerExpression.cs
- GlobalDataBindingHandler.cs
- MemoryStream.cs
- ListBox.cs
- RSACryptoServiceProvider.cs
- GridViewRowEventArgs.cs
- ConsumerConnectionPoint.cs
- TakeOrSkipQueryOperator.cs
- SelectedDatesCollection.cs
- ServiceObjectContainer.cs
- AllMembershipCondition.cs
- BamlResourceSerializer.cs
- TextParaLineResult.cs
- DynamicPhysicalDiscoSearcher.cs
- ApplicationActivator.cs
- BitmapImage.cs
- XamlBrushSerializer.cs
- BitmapEditor.cs
- TimelineClockCollection.cs
- QueryExpr.cs
- GuidConverter.cs
- SystemIcmpV4Statistics.cs
- DataSourceView.cs
- ProtocolsConfigurationHandler.cs
- Pair.cs
- UnsafeNetInfoNativeMethods.cs
- CommunicationObjectManager.cs
- DataGridViewCellStyleChangedEventArgs.cs
- BasicExpressionVisitor.cs
- WindowsGraphicsWrapper.cs
- ToolStripCodeDomSerializer.cs
- DPCustomTypeDescriptor.cs
- CodeTypeDeclaration.cs
- DetailsViewDeleteEventArgs.cs
- StateMachineSubscription.cs
- HtmlTernaryTree.cs
- Adorner.cs
- ControlBuilderAttribute.cs
- ZipIOExtraField.cs
- XslException.cs
- CollectionBuilder.cs
- CommonXSendMessage.cs
- PolicyException.cs
- SqlError.cs
- PerformanceCounterCategory.cs
- ResourcePart.cs
- CacheMemory.cs
- SchemaMapping.cs
- ActivityDesigner.cs
- XmlProcessingInstruction.cs
- XmlWriterSettings.cs
- PackageProperties.cs
- PropertyMetadata.cs
- CornerRadiusConverter.cs
- XmlDictionaryWriter.cs
- XmlTextReaderImpl.cs
- RegexTree.cs
- Privilege.cs
- ReverseInheritProperty.cs
- XmlName.cs
- XmlComplianceUtil.cs