Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceColumn.cs / 1 / EntityDataSourceColumn.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.EntityClient; using System.Data.Metadata.Edm; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.ComponentModel; using System.Data.Common; using System.Data.Objects.DataClasses; using System.Data.Objects; using System.Data; namespace System.Web.UI.WebControls { ////// Represents a column in EntityDataSourceView. /// internal abstract class EntityDataSourceColumn { protected EntityDataSourceColumn(string displayName) : this(displayName, (EntityDataSourceColumn)null) { } protected EntityDataSourceColumn(string displayName, EntityDataSourceColumn controllingColumn) { EntityDataSourceUtil.CheckArgumentNull(displayName, "displayName"); this.DisplayName = displayName; this.ControllingColumn = controllingColumn; } ////// Gets the display name for this column. /// internal readonly string DisplayName; ////// Gets the column exposed to the user. For instance, the reference key /// it.Order.OrderID might have a dependent it.OrderID where there is a /// ReferentialConstraint. /// internal readonly EntityDataSourceColumn ControllingColumn; ////// Gets value indicating whether the column should be exposed to the user. /// internal bool IsHidden { get { // Columns with dependents are not shown to the user. They are // merely used to plumb values (e.g. via referential integrity // constraints) return this.ControllingColumn != null; } } ////// Gets the CLR type for the column value. /// internal abstract Type ClrType { get; } ////// Gets a value indicating whether the original value for the column /// needs to be preserved. /// internal abstract bool IsInteresting { get; } ////// Gets a value indicating whether the column can be modified. Can be /// overridden by the collection (which may be readonly). /// internal abstract bool CanWrite { get; } ////// Indicates whether this column can be assigned a value of null. /// internal abstract bool IsNullable { get; } ////// Indicates whether this column represents a primitive type. /// internal abstract bool IsPrimitive { get; } /// Returns an Entity-SQL representation of this column with respect /// to entity parameter 'it'. /// ///Entity-SQL string. internal abstract string GetEntitySqlValue(); protected abstract object GetValue(object entity); protected abstract void SetValue(object entity, object value); internal object GetValue(EntityDataSourceWrapper wrapper) { return GetValue(wrapper.WrappedEntity); } internal void SetValue(EntityDataSourceWrapper wrapper, object value) { SetValue(wrapper.WrappedEntity, value); } } ////// An EntityDataSourceView column that is an entity type or complex type property. /// internal class EntityDataSourcePropertyColumn : EntityDataSourceColumn { private readonly EntityDataSourceMemberPath memberPath; internal EntityDataSourcePropertyColumn(EntityDataSourceMemberPath memberPath) : base(EntityDataSourceUtil.CheckArgumentNull(memberPath, "memberPath").GetDescription()) { this.memberPath = memberPath; } internal override bool IsInteresting { get { // the member path knows if its interesting... return this.memberPath.IsInteresting; } } internal override bool CanWrite { get { // can always write return true; } } internal override bool IsNullable { get { return memberPath.IsNullable; } } internal override bool IsPrimitive { get { return memberPath.IsPrimitive; } } internal override Type ClrType { get { return this.memberPath.ClrType; } } override protected object GetValue(object entity) { return this.memberPath.GetValue(entity); } override protected void SetValue(object entity, object value) { this.memberPath.SetValue(entity, value); } internal override string GetEntitySqlValue() { return this.memberPath.GetEntitySqlValue(); } public override string ToString() { return this.memberPath.ToString(); } ////// Indicates whether this column represents a primary key value; /// internal bool IsKey { get { return memberPath.IsKey; } } } ////// An EntityDataSourceView column /// internal class EntityDataSourceReferenceKeyColumn : EntityDataSourceColumn { private readonly EntityDataSourceReferenceGroup group; private readonly EdmProperty keyMember; private readonly Type clrType; private readonly bool isNullable; internal EntityDataSourceReferenceKeyColumn(EntityDataSourceReferenceGroup group, EdmProperty keyMember, EntityDataSourceColumn dependent) : base(CreateDisplayName(group, keyMember), dependent) { EntityDataSourceUtil.CheckArgumentNull(group, "group"); EntityDataSourceUtil.CheckArgumentNull(keyMember, "keyMember"); this.group = group; this.keyMember = keyMember; this.clrType = EntityDataSourceUtil.GetPrimitiveMemberClrType(keyMember); // if the association end is optional (0..1), make sure the CLR type // is also nullable if (this.group.End.CorrespondingAssociationEndMember.RelationshipMultiplicity == RelationshipMultiplicity.ZeroOrOne) { this.clrType = EntityDataSourceUtil.MakeNullable(clrType); this.isNullable = true; } } internal override bool IsInteresting { get { // references are always interesting return true; } } internal override bool CanWrite { get { // references can always be written return true; } } internal override bool IsNullable { get { return this.isNullable; } } internal override bool IsPrimitive { get { return keyMember.TypeUsage.EdmType.BuiltInTypeKind == BuiltInTypeKind.PrimitiveType; } } internal override Type ClrType { get { return this.clrType; } } internal EntityDataSourceReferenceGroup Group { get { return this.group; } } internal EdmMember KeyMember { get { return this.keyMember; } } private static string CreateDisplayName(EntityDataSourceReferenceGroup group, EdmProperty keyMember) { EntityDataSourceUtil.CheckArgumentNull(group, "group"); EntityDataSourceUtil.CheckArgumentNull(keyMember, "keyMember"); NavigationProperty navigationProperty; string result; if (EntityDataSourceUtil.TryGetCorrespondingNavigationProperty(group.End.CorrespondingAssociationEndMember, out navigationProperty)) { result = navigationProperty.Name + "." + keyMember.Name; } else { // if there is no Navigation property, use the TargetTole and KeyMember name // TargetRole.KeyMember result = group.End.Name + "." + keyMember.Name; } return result; } public override string ToString() { return String.Format(CultureInfo.InvariantCulture, "", this.group.End.ParentAssociationSet.Name, this.group.End.Name); } protected override object GetValue(object entity) { EntityKey entityKey = this.Group.GetEntityKey((IEntityWithRelationships)entity); if (null == entityKey) { return null; } else { object value = null; // loop through to find the correct keymember, take compound key into consideration foreach (EntityKeyMember entityKeyValue in entityKey.EntityKeyValues) { if (entityKeyValue.Key == this.KeyMember.Name) { value = entityKeyValue.Value; } } return value; } } protected override void SetValue(object entity, object value) { throw new InvalidOperationException(Strings.SetValueNotSupported); } internal override string GetEntitySqlValue() { // syntax: NAVIGATE(it, _association_type_name_, _target_role_name_)._key_member_ StringBuilder builder = new StringBuilder(); builder.Append("NAVIGATE("); builder.Append(EntityDataSourceUtil.EntitySqlElementAlias); builder.Append(", "); builder.Append(EntityDataSourceUtil.CreateEntitySqlTypeIdentifier(this.Group.End.ParentAssociationSet.ElementType)); builder.Append(", "); builder.Append(EntityDataSourceUtil.QuoteEntitySqlIdentifier(this.Group.End.CorrespondingAssociationEndMember.Name)); builder.Append(")."); builder.Append(EntityDataSourceUtil.QuoteEntitySqlIdentifier(this.keyMember.Name)); string result = builder.ToString(); return result; } } internal abstract class EntityDataSourceReferenceValueColumn : EntityDataSourceColumn { private readonly NavigationProperty navigationProperty; protected EntityDataSourceReferenceValueColumn(MetadataWorkspace ocWorkspace, NavigationProperty navigationProperty) : base(EntityDataSourceUtil.CheckArgumentNull(navigationProperty, "navigationProperty").Name) { EntityDataSourceUtil.CheckArgumentNull(ocWorkspace, "ocWorkspace"); this.navigationProperty = navigationProperty; } internal static EntityDataSourceReferenceValueColumn Create(Type clrToType, MetadataWorkspace ocWorkspace, NavigationProperty navigationProperty) { EntityDataSourceUtil.CheckArgumentNull(clrToType, "clrToType"); Type columnType = typeof(EntityDataSourceReferenceValueColumn<>).MakeGenericType(clrToType); EntityDataSourceReferenceValueColumn result = (EntityDataSourceReferenceValueColumn)Activator.CreateInstance(columnType, ocWorkspace, navigationProperty); return result; } internal override bool CanWrite { get { // can never write to a navigation reference return false; } } internal override bool IsNullable { get { return navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.ZeroOrOne; } } protected NavigationProperty NavigationProperty { get { return this.navigationProperty; } } internal override bool IsPrimitive { get { return false; } } internal override string GetEntitySqlValue() { // it.NavigationPropertyName string result = EntityDataSourceUtil.EntitySqlElementAlias + "." + EntityDataSourceUtil.QuoteEntitySqlIdentifier(this.navigationProperty.Name); return result; } internal override bool IsInteresting { get { // a navigation reference is not written, so its original values aren't interesting return false; } } protected override void SetValue(object entity, object value) { throw new InvalidOperationException(Strings.SetValueNotSupported); } } internal class EntityDataSourceReferenceValueColumn : EntityDataSourceReferenceValueColumn where T : class, IEntityWithRelationships { public EntityDataSourceReferenceValueColumn(MetadataWorkspace ocWorkspace, NavigationProperty navigationProperty) : base(ocWorkspace, navigationProperty) { } protected override object GetValue(object entity) { object result; EntityReference reference = GetRelatedReference((IEntityWithRelationships)entity); if (reference.IsLoaded) { result = reference.Value; } else { result = null; } return result; } internal override Type ClrType { get { return typeof(T); } } private EntityReference GetRelatedReference(IEntityWithRelationships entity) { EntityReference reference = entity.RelationshipManager.GetRelatedReference ( this.NavigationProperty.RelationshipType.FullName, this.NavigationProperty.ToEndMember.Name); return reference; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.EntityClient; using System.Data.Metadata.Edm; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.ComponentModel; using System.Data.Common; using System.Data.Objects.DataClasses; using System.Data.Objects; using System.Data; namespace System.Web.UI.WebControls { ////// Represents a column in EntityDataSourceView. /// internal abstract class EntityDataSourceColumn { protected EntityDataSourceColumn(string displayName) : this(displayName, (EntityDataSourceColumn)null) { } protected EntityDataSourceColumn(string displayName, EntityDataSourceColumn controllingColumn) { EntityDataSourceUtil.CheckArgumentNull(displayName, "displayName"); this.DisplayName = displayName; this.ControllingColumn = controllingColumn; } ////// Gets the display name for this column. /// internal readonly string DisplayName; ////// Gets the column exposed to the user. For instance, the reference key /// it.Order.OrderID might have a dependent it.OrderID where there is a /// ReferentialConstraint. /// internal readonly EntityDataSourceColumn ControllingColumn; ////// Gets value indicating whether the column should be exposed to the user. /// internal bool IsHidden { get { // Columns with dependents are not shown to the user. They are // merely used to plumb values (e.g. via referential integrity // constraints) return this.ControllingColumn != null; } } ////// Gets the CLR type for the column value. /// internal abstract Type ClrType { get; } ////// Gets a value indicating whether the original value for the column /// needs to be preserved. /// internal abstract bool IsInteresting { get; } ////// Gets a value indicating whether the column can be modified. Can be /// overridden by the collection (which may be readonly). /// internal abstract bool CanWrite { get; } ////// Indicates whether this column can be assigned a value of null. /// internal abstract bool IsNullable { get; } ////// Indicates whether this column represents a primitive type. /// internal abstract bool IsPrimitive { get; } /// Returns an Entity-SQL representation of this column with respect /// to entity parameter 'it'. /// ///Entity-SQL string. internal abstract string GetEntitySqlValue(); protected abstract object GetValue(object entity); protected abstract void SetValue(object entity, object value); internal object GetValue(EntityDataSourceWrapper wrapper) { return GetValue(wrapper.WrappedEntity); } internal void SetValue(EntityDataSourceWrapper wrapper, object value) { SetValue(wrapper.WrappedEntity, value); } } ////// An EntityDataSourceView column that is an entity type or complex type property. /// internal class EntityDataSourcePropertyColumn : EntityDataSourceColumn { private readonly EntityDataSourceMemberPath memberPath; internal EntityDataSourcePropertyColumn(EntityDataSourceMemberPath memberPath) : base(EntityDataSourceUtil.CheckArgumentNull(memberPath, "memberPath").GetDescription()) { this.memberPath = memberPath; } internal override bool IsInteresting { get { // the member path knows if its interesting... return this.memberPath.IsInteresting; } } internal override bool CanWrite { get { // can always write return true; } } internal override bool IsNullable { get { return memberPath.IsNullable; } } internal override bool IsPrimitive { get { return memberPath.IsPrimitive; } } internal override Type ClrType { get { return this.memberPath.ClrType; } } override protected object GetValue(object entity) { return this.memberPath.GetValue(entity); } override protected void SetValue(object entity, object value) { this.memberPath.SetValue(entity, value); } internal override string GetEntitySqlValue() { return this.memberPath.GetEntitySqlValue(); } public override string ToString() { return this.memberPath.ToString(); } ////// Indicates whether this column represents a primary key value; /// internal bool IsKey { get { return memberPath.IsKey; } } } ////// An EntityDataSourceView column /// internal class EntityDataSourceReferenceKeyColumn : EntityDataSourceColumn { private readonly EntityDataSourceReferenceGroup group; private readonly EdmProperty keyMember; private readonly Type clrType; private readonly bool isNullable; internal EntityDataSourceReferenceKeyColumn(EntityDataSourceReferenceGroup group, EdmProperty keyMember, EntityDataSourceColumn dependent) : base(CreateDisplayName(group, keyMember), dependent) { EntityDataSourceUtil.CheckArgumentNull(group, "group"); EntityDataSourceUtil.CheckArgumentNull(keyMember, "keyMember"); this.group = group; this.keyMember = keyMember; this.clrType = EntityDataSourceUtil.GetPrimitiveMemberClrType(keyMember); // if the association end is optional (0..1), make sure the CLR type // is also nullable if (this.group.End.CorrespondingAssociationEndMember.RelationshipMultiplicity == RelationshipMultiplicity.ZeroOrOne) { this.clrType = EntityDataSourceUtil.MakeNullable(clrType); this.isNullable = true; } } internal override bool IsInteresting { get { // references are always interesting return true; } } internal override bool CanWrite { get { // references can always be written return true; } } internal override bool IsNullable { get { return this.isNullable; } } internal override bool IsPrimitive { get { return keyMember.TypeUsage.EdmType.BuiltInTypeKind == BuiltInTypeKind.PrimitiveType; } } internal override Type ClrType { get { return this.clrType; } } internal EntityDataSourceReferenceGroup Group { get { return this.group; } } internal EdmMember KeyMember { get { return this.keyMember; } } private static string CreateDisplayName(EntityDataSourceReferenceGroup group, EdmProperty keyMember) { EntityDataSourceUtil.CheckArgumentNull(group, "group"); EntityDataSourceUtil.CheckArgumentNull(keyMember, "keyMember"); NavigationProperty navigationProperty; string result; if (EntityDataSourceUtil.TryGetCorrespondingNavigationProperty(group.End.CorrespondingAssociationEndMember, out navigationProperty)) { result = navigationProperty.Name + "." + keyMember.Name; } else { // if there is no Navigation property, use the TargetTole and KeyMember name // TargetRole.KeyMember result = group.End.Name + "." + keyMember.Name; } return result; } public override string ToString() { return String.Format(CultureInfo.InvariantCulture, "", this.group.End.ParentAssociationSet.Name, this.group.End.Name); } protected override object GetValue(object entity) { EntityKey entityKey = this.Group.GetEntityKey((IEntityWithRelationships)entity); if (null == entityKey) { return null; } else { object value = null; // loop through to find the correct keymember, take compound key into consideration foreach (EntityKeyMember entityKeyValue in entityKey.EntityKeyValues) { if (entityKeyValue.Key == this.KeyMember.Name) { value = entityKeyValue.Value; } } return value; } } protected override void SetValue(object entity, object value) { throw new InvalidOperationException(Strings.SetValueNotSupported); } internal override string GetEntitySqlValue() { // syntax: NAVIGATE(it, _association_type_name_, _target_role_name_)._key_member_ StringBuilder builder = new StringBuilder(); builder.Append("NAVIGATE("); builder.Append(EntityDataSourceUtil.EntitySqlElementAlias); builder.Append(", "); builder.Append(EntityDataSourceUtil.CreateEntitySqlTypeIdentifier(this.Group.End.ParentAssociationSet.ElementType)); builder.Append(", "); builder.Append(EntityDataSourceUtil.QuoteEntitySqlIdentifier(this.Group.End.CorrespondingAssociationEndMember.Name)); builder.Append(")."); builder.Append(EntityDataSourceUtil.QuoteEntitySqlIdentifier(this.keyMember.Name)); string result = builder.ToString(); return result; } } internal abstract class EntityDataSourceReferenceValueColumn : EntityDataSourceColumn { private readonly NavigationProperty navigationProperty; protected EntityDataSourceReferenceValueColumn(MetadataWorkspace ocWorkspace, NavigationProperty navigationProperty) : base(EntityDataSourceUtil.CheckArgumentNull(navigationProperty, "navigationProperty").Name) { EntityDataSourceUtil.CheckArgumentNull(ocWorkspace, "ocWorkspace"); this.navigationProperty = navigationProperty; } internal static EntityDataSourceReferenceValueColumn Create(Type clrToType, MetadataWorkspace ocWorkspace, NavigationProperty navigationProperty) { EntityDataSourceUtil.CheckArgumentNull(clrToType, "clrToType"); Type columnType = typeof(EntityDataSourceReferenceValueColumn<>).MakeGenericType(clrToType); EntityDataSourceReferenceValueColumn result = (EntityDataSourceReferenceValueColumn)Activator.CreateInstance(columnType, ocWorkspace, navigationProperty); return result; } internal override bool CanWrite { get { // can never write to a navigation reference return false; } } internal override bool IsNullable { get { return navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.ZeroOrOne; } } protected NavigationProperty NavigationProperty { get { return this.navigationProperty; } } internal override bool IsPrimitive { get { return false; } } internal override string GetEntitySqlValue() { // it.NavigationPropertyName string result = EntityDataSourceUtil.EntitySqlElementAlias + "." + EntityDataSourceUtil.QuoteEntitySqlIdentifier(this.navigationProperty.Name); return result; } internal override bool IsInteresting { get { // a navigation reference is not written, so its original values aren't interesting return false; } } protected override void SetValue(object entity, object value) { throw new InvalidOperationException(Strings.SetValueNotSupported); } } internal class EntityDataSourceReferenceValueColumn : EntityDataSourceReferenceValueColumn where T : class, IEntityWithRelationships { public EntityDataSourceReferenceValueColumn(MetadataWorkspace ocWorkspace, NavigationProperty navigationProperty) : base(ocWorkspace, navigationProperty) { } protected override object GetValue(object entity) { object result; EntityReference reference = GetRelatedReference((IEntityWithRelationships)entity); if (reference.IsLoaded) { result = reference.Value; } else { result = null; } return result; } internal override Type ClrType { get { return typeof(T); } } private EntityReference GetRelatedReference(IEntityWithRelationships entity) { EntityReference reference = entity.RelationshipManager.GetRelatedReference ( this.NavigationProperty.RelationshipType.FullName, this.NavigationProperty.ToEndMember.Name); return reference; } } } // 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
- Util.cs
- CompilationPass2Task.cs
- _NegoStream.cs
- Decimal.cs
- ViewBase.cs
- RayMeshGeometry3DHitTestResult.cs
- AppDomainInfo.cs
- SessionEndedEventArgs.cs
- RewritingPass.cs
- CachedBitmap.cs
- SettingsPropertyNotFoundException.cs
- ChannelBinding.cs
- PathData.cs
- XsltArgumentList.cs
- ExeContext.cs
- ParallelTimeline.cs
- LineServicesRun.cs
- HelpProvider.cs
- MessagePartSpecification.cs
- XmlSchemaIdentityConstraint.cs
- SqlInternalConnection.cs
- UrlPath.cs
- CodeDOMProvider.cs
- CodeDomComponentSerializationService.cs
- ClientRoleProvider.cs
- AspProxy.cs
- RtfControlWordInfo.cs
- EntryPointNotFoundException.cs
- SQLBinary.cs
- UICuesEvent.cs
- Group.cs
- StylusButton.cs
- AccessibilityHelperForVista.cs
- ErrorWebPart.cs
- RelationshipSet.cs
- VectorCollectionValueSerializer.cs
- SoapConverter.cs
- GenericTypeParameterBuilder.cs
- WorkerRequest.cs
- Pen.cs
- PipeStream.cs
- ParameterRetriever.cs
- TcpChannelListener.cs
- DataGridViewImageCell.cs
- PowerStatus.cs
- DigitShape.cs
- DoubleCollection.cs
- ReliabilityContractAttribute.cs
- ObjectSerializerFactory.cs
- WebPartMinimizeVerb.cs
- ContextMenu.cs
- NativeMethods.cs
- AddressingVersion.cs
- SchemaMapping.cs
- MappingMetadataHelper.cs
- IndexedEnumerable.cs
- DeploymentSectionCache.cs
- NullReferenceException.cs
- EventBindingService.cs
- Typography.cs
- RepeaterItemEventArgs.cs
- StandardToolWindows.cs
- XmlDownloadManager.cs
- SoapExtensionReflector.cs
- XamlFigureLengthSerializer.cs
- SystemIPInterfaceProperties.cs
- AuthenticationModuleElementCollection.cs
- RegexMatchCollection.cs
- RecommendedAsConfigurableAttribute.cs
- _BaseOverlappedAsyncResult.cs
- Duration.cs
- FontEditor.cs
- HtmlElementCollection.cs
- OleDbDataAdapter.cs
- VolatileResourceManager.cs
- EndOfStreamException.cs
- KeyedHashAlgorithm.cs
- UTF32Encoding.cs
- XmlSchemaNotation.cs
- CssClassPropertyAttribute.cs
- LocalizationParserHooks.cs
- XmlSchemaCompilationSettings.cs
- BooleanToVisibilityConverter.cs
- OracleParameterCollection.cs
- COM2ExtendedUITypeEditor.cs
- __ConsoleStream.cs
- ServicesUtilities.cs
- DbCommandDefinition.cs
- UserPreferenceChangedEventArgs.cs
- XmlHierarchyData.cs
- PeerSecurityManager.cs
- ReservationCollection.cs
- SelectionItemProviderWrapper.cs
- StorageComplexPropertyMapping.cs
- RotationValidation.cs
- RemoteCryptoTokenProvider.cs
- WebConfigurationFileMap.cs
- _AutoWebProxyScriptEngine.cs
- ShapingWorkspace.cs
- WorkflowService.cs