Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceColumn.cs / 1599186 / 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; using System.Runtime.CompilerServices; 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(); internal abstract object GetValue(EntityDataSourceWrapper entity); internal abstract void SetValue(EntityDataSourceWrapper entity, object 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 internal object GetValue(EntityDataSourceWrapper entity) { return this.memberPath.GetValue(entity); } override internal void SetValue(EntityDataSourceWrapper 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); } internal override object GetValue(EntityDataSourceWrapper entity) { EntityKey entityKey = this.Group.GetEntityKey(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; } } internal override void SetValue(EntityDataSourceWrapper 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; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] 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; } } internal override void SetValue(EntityDataSourceWrapper entity, object value) { throw new InvalidOperationException(Strings.SetValueNotSupported); } } internal class EntityDataSourceReferenceValueColumn : EntityDataSourceReferenceValueColumn where T : class { public EntityDataSourceReferenceValueColumn(MetadataWorkspace ocWorkspace, NavigationProperty navigationProperty) : base(ocWorkspace, navigationProperty) { } internal override object GetValue(EntityDataSourceWrapper entity) { object result; EntityReference reference = GetRelatedReference(entity); if (reference.IsLoaded) { result = reference.Value; } else { result = null; } return result; } internal override Type ClrType { get { return typeof(T); } } private EntityReference GetRelatedReference(EntityDataSourceWrapper entity) { RelationshipManager relationshipManager = entity.RelationshipManager; Debug.Assert(relationshipManager != null, "Coldn't retrieve a RelationshipManager"); EntityReference reference = 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; using System.Runtime.CompilerServices; 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(); internal abstract object GetValue(EntityDataSourceWrapper entity); internal abstract void SetValue(EntityDataSourceWrapper entity, object 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 internal object GetValue(EntityDataSourceWrapper entity) { return this.memberPath.GetValue(entity); } override internal void SetValue(EntityDataSourceWrapper 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); } internal override object GetValue(EntityDataSourceWrapper entity) { EntityKey entityKey = this.Group.GetEntityKey(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; } } internal override void SetValue(EntityDataSourceWrapper 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; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] 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; } } internal override void SetValue(EntityDataSourceWrapper entity, object value) { throw new InvalidOperationException(Strings.SetValueNotSupported); } } internal class EntityDataSourceReferenceValueColumn : EntityDataSourceReferenceValueColumn where T : class { public EntityDataSourceReferenceValueColumn(MetadataWorkspace ocWorkspace, NavigationProperty navigationProperty) : base(ocWorkspace, navigationProperty) { } internal override object GetValue(EntityDataSourceWrapper entity) { object result; EntityReference reference = GetRelatedReference(entity); if (reference.IsLoaded) { result = reference.Value; } else { result = null; } return result; } internal override Type ClrType { get { return typeof(T); } } private EntityReference GetRelatedReference(EntityDataSourceWrapper entity) { RelationshipManager relationshipManager = entity.RelationshipManager; Debug.Assert(relationshipManager != null, "Coldn't retrieve a RelationshipManager"); EntityReference reference = 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
- Win32SafeHandles.cs
- FragmentQueryKB.cs
- TypeListConverter.cs
- SemaphoreFullException.cs
- PropertyGridView.cs
- ProcessManager.cs
- CertificateReferenceElement.cs
- InheritanceContextHelper.cs
- XsltFunctions.cs
- DecoderBestFitFallback.cs
- XmlSchemaAppInfo.cs
- OutputCacheEntry.cs
- XmlBinaryWriterSession.cs
- MultipleViewPattern.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- SemaphoreFullException.cs
- CustomGrammar.cs
- BufferModeSettings.cs
- SqlDelegatedTransaction.cs
- PasswordRecovery.cs
- StringConcat.cs
- SemanticResolver.cs
- RecognizerInfo.cs
- ChildTable.cs
- InstancePersistenceContext.cs
- EntityContainerEntitySetDefiningQuery.cs
- Bidi.cs
- ToolStripContentPanelRenderEventArgs.cs
- SequenceDesigner.cs
- PasswordDeriveBytes.cs
- GlyphsSerializer.cs
- CalendarAutoFormatDialog.cs
- StateMachineAction.cs
- EventListener.cs
- SqlTriggerAttribute.cs
- ContainerSelectorGlyph.cs
- XmlSortKey.cs
- WeakReference.cs
- HtmlTextViewAdapter.cs
- DiagnosticSection.cs
- RegistrySecurity.cs
- Crc32.cs
- ProviderBase.cs
- DoubleUtil.cs
- ToolConsole.cs
- ToolStripInSituService.cs
- XmlParserContext.cs
- MetadataHelper.cs
- ListCardsInFileRequest.cs
- FilterQueryOptionExpression.cs
- DetailsViewDeletedEventArgs.cs
- WindowsFormsLinkLabel.cs
- SQLDecimalStorage.cs
- UpdateException.cs
- DummyDataSource.cs
- MachinePropertyVariants.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- AsymmetricSignatureFormatter.cs
- XmlHelper.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- RangeValueProviderWrapper.cs
- DiscoveryInnerClientManaged11.cs
- Regex.cs
- Configuration.cs
- InstanceOwnerQueryResult.cs
- Stack.cs
- ObjectItemNoOpAssemblyLoader.cs
- CultureTable.cs
- LinkLabel.cs
- DataGridViewCheckBoxColumn.cs
- WebPartsPersonalizationAuthorization.cs
- ResourceProperty.cs
- XNameTypeConverter.cs
- RuntimeWrappedException.cs
- PowerStatus.cs
- OperatorExpressions.cs
- GeneratedContractType.cs
- TextDecorationLocationValidation.cs
- DesignerUtility.cs
- HtmlControl.cs
- tooltip.cs
- PasswordDeriveBytes.cs
- CheckBoxFlatAdapter.cs
- CodeAttributeDeclaration.cs
- HostAdapter.cs
- AnnotationService.cs
- ConfigurationProperty.cs
- Localizer.cs
- EnumerableCollectionView.cs
- FormatConvertedBitmap.cs
- QuadraticBezierSegment.cs
- SqlCacheDependencySection.cs
- NetworkInterface.cs
- IsolatedStorageFilePermission.cs
- TransactionScope.cs
- complextypematerializer.cs
- SQLInt64.cs
- PrimitiveSchema.cs
- DataGrid.cs
- RelatedImageListAttribute.cs