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 / EntityDataSourceMemberPath.cs / 1 / EntityDataSourceMemberPath.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.Data.Common;
using System.Data.Objects;
namespace System.Web.UI.WebControls
{
///
/// A glorified linked list. Describes a chain of properties from a primitive
/// type to a root entity.
///
class EntityDataSourceMemberPath
{
private readonly EdmProperty property;
private readonly PropertyInfo propertyInfo;
private readonly EntityDataSourceMemberPath parent;
private readonly bool isLocallyInteresting;
private readonly Type clrType;
private readonly bool isKey;
internal EntityDataSourceMemberPath(MetadataWorkspace ocWorkspace, EntityDataSourceMemberPath parent, EdmProperty property, bool isLocallyInteresting)
{
EntityDataSourceUtil.CheckArgumentNull(ocWorkspace, "ocWorkspace");
EntityDataSourceUtil.CheckArgumentNull(property, "property");
this.property = property;
this.parent = parent;
this.isLocallyInteresting = isLocallyInteresting;
this.clrType = EntityDataSourceUtil.GetMemberClrType(ocWorkspace, property);
this.isKey = IsPropertyAKey(property);
// retrieve PropertyInfo (with respect to parent CLR type)
StructuralType parentType = property.DeclaringType;
Type parentClrType = EntityDataSourceUtil.GetClrType(ocWorkspace, parentType);
this.propertyInfo = EntityDataSourceUtil.GetPropertyInfo(parentClrType, this.property.Name);
}
///
/// Describes the member path in the form 'property1.property2...'. Use to
/// determine display name for nested properties in the EDSC.
///
/// Description of the
internal string GetDescription()
{
string prefix = null == this.parent ? string.Empty : this.parent.GetDescription() + ".";
return prefix + this.property.Name;
}
///
/// Indicates whether original values of this member should be preserved.
///
internal bool IsInteresting
{
get
{
// a member path is interesting if anything along the path is interesting
return this.isLocallyInteresting || (null != this.parent && this.parent.IsInteresting);
}
}
///
/// Indicates whether this member represents a primary key value.
///
internal bool IsKey
{
get { return this.isKey; }
}
///
/// Indicates whether this member can be assigned a value of null.
///
internal bool IsNullable
{
get { return this.property.Nullable; }
}
internal bool IsPrimitive
{
get { return this.property.TypeUsage.EdmType.BuiltInTypeKind == BuiltInTypeKind.PrimitiveType; }
}
///
/// Gets the CLR type of the last member in the path.
///
internal Type ClrType
{
get { return this.clrType; }
}
internal object GetValue(object entity)
{
object parentObjectValue = GetParentObjectValue(entity, false /* initialize */);
if (null == parentObjectValue)
{
// use convention that property of null is null
return null;
}
else
{
// get this property
object propertyValue = this.propertyInfo.GetValue(parentObjectValue, new object[] { });
return propertyValue;
}
}
internal void SetValue(object entity, object value)
{
object parentObjectValue = GetParentObjectValue(entity, true /* initialize */);
// set property value on parent
this.propertyInfo.SetValue(parentObjectValue, value, new object[] { });
}
private object Initialize(object entity)
{
// get parent's value
object parentObjectValue = GetParentObjectValue(entity, true /* initialize */);
// construct type instance for this property
object propertyValue = EntityDataSourceUtil.InitializeType(this.ClrType);
// set property
this.propertyInfo.SetValue(parentObjectValue, propertyValue, new object[] { });
return propertyValue;
}
private object GetParentObjectValue(object entity, bool initialize)
{
// get parent's value
object parentObjectValue;
if (null == this.parent)
{
// at the top level, the entity is the value
parentObjectValue = entity;
}
else
{
parentObjectValue = this.parent.GetValue(entity);
if (null == parentObjectValue && initialize)
{
parentObjectValue = this.parent.Initialize(entity);
}
}
return parentObjectValue;
}
internal string GetEntitySqlValue()
{
// it.[member1].[member2]...
string prefix;
if (null != parent)
{
prefix = parent.GetEntitySqlValue();
}
else
{
prefix = EntityDataSourceUtil.EntitySqlElementAlias;
}
string eSql = prefix + "." + EntityDataSourceUtil.QuoteEntitySqlIdentifier(this.property.Name);
return eSql;
}
private bool IsPropertyAKey(EdmProperty property)
{
bool isKey = false;
EntityType entityType = property.DeclaringType as EntityType;
if (null != entityType)
{
isKey = entityType.KeyMembers.Contains(property);
}
return isKey;
}
public override string ToString()
{
string prefix = null == this.parent ? string.Empty : this.parent.ToString() + "->";
return prefix + this.property.Name;
}
}
}
// 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.Data.Common;
using System.Data.Objects;
namespace System.Web.UI.WebControls
{
///
/// A glorified linked list. Describes a chain of properties from a primitive
/// type to a root entity.
///
class EntityDataSourceMemberPath
{
private readonly EdmProperty property;
private readonly PropertyInfo propertyInfo;
private readonly EntityDataSourceMemberPath parent;
private readonly bool isLocallyInteresting;
private readonly Type clrType;
private readonly bool isKey;
internal EntityDataSourceMemberPath(MetadataWorkspace ocWorkspace, EntityDataSourceMemberPath parent, EdmProperty property, bool isLocallyInteresting)
{
EntityDataSourceUtil.CheckArgumentNull(ocWorkspace, "ocWorkspace");
EntityDataSourceUtil.CheckArgumentNull(property, "property");
this.property = property;
this.parent = parent;
this.isLocallyInteresting = isLocallyInteresting;
this.clrType = EntityDataSourceUtil.GetMemberClrType(ocWorkspace, property);
this.isKey = IsPropertyAKey(property);
// retrieve PropertyInfo (with respect to parent CLR type)
StructuralType parentType = property.DeclaringType;
Type parentClrType = EntityDataSourceUtil.GetClrType(ocWorkspace, parentType);
this.propertyInfo = EntityDataSourceUtil.GetPropertyInfo(parentClrType, this.property.Name);
}
///
/// Describes the member path in the form 'property1.property2...'. Use to
/// determine display name for nested properties in the EDSC.
///
/// Description of the
internal string GetDescription()
{
string prefix = null == this.parent ? string.Empty : this.parent.GetDescription() + ".";
return prefix + this.property.Name;
}
///
/// Indicates whether original values of this member should be preserved.
///
internal bool IsInteresting
{
get
{
// a member path is interesting if anything along the path is interesting
return this.isLocallyInteresting || (null != this.parent && this.parent.IsInteresting);
}
}
///
/// Indicates whether this member represents a primary key value.
///
internal bool IsKey
{
get { return this.isKey; }
}
///
/// Indicates whether this member can be assigned a value of null.
///
internal bool IsNullable
{
get { return this.property.Nullable; }
}
internal bool IsPrimitive
{
get { return this.property.TypeUsage.EdmType.BuiltInTypeKind == BuiltInTypeKind.PrimitiveType; }
}
///
/// Gets the CLR type of the last member in the path.
///
internal Type ClrType
{
get { return this.clrType; }
}
internal object GetValue(object entity)
{
object parentObjectValue = GetParentObjectValue(entity, false /* initialize */);
if (null == parentObjectValue)
{
// use convention that property of null is null
return null;
}
else
{
// get this property
object propertyValue = this.propertyInfo.GetValue(parentObjectValue, new object[] { });
return propertyValue;
}
}
internal void SetValue(object entity, object value)
{
object parentObjectValue = GetParentObjectValue(entity, true /* initialize */);
// set property value on parent
this.propertyInfo.SetValue(parentObjectValue, value, new object[] { });
}
private object Initialize(object entity)
{
// get parent's value
object parentObjectValue = GetParentObjectValue(entity, true /* initialize */);
// construct type instance for this property
object propertyValue = EntityDataSourceUtil.InitializeType(this.ClrType);
// set property
this.propertyInfo.SetValue(parentObjectValue, propertyValue, new object[] { });
return propertyValue;
}
private object GetParentObjectValue(object entity, bool initialize)
{
// get parent's value
object parentObjectValue;
if (null == this.parent)
{
// at the top level, the entity is the value
parentObjectValue = entity;
}
else
{
parentObjectValue = this.parent.GetValue(entity);
if (null == parentObjectValue && initialize)
{
parentObjectValue = this.parent.Initialize(entity);
}
}
return parentObjectValue;
}
internal string GetEntitySqlValue()
{
// it.[member1].[member2]...
string prefix;
if (null != parent)
{
prefix = parent.GetEntitySqlValue();
}
else
{
prefix = EntityDataSourceUtil.EntitySqlElementAlias;
}
string eSql = prefix + "." + EntityDataSourceUtil.QuoteEntitySqlIdentifier(this.property.Name);
return eSql;
}
private bool IsPropertyAKey(EdmProperty property)
{
bool isKey = false;
EntityType entityType = property.DeclaringType as EntityType;
if (null != entityType)
{
isKey = entityType.KeyMembers.Contains(property);
}
return isKey;
}
public override string ToString()
{
string prefix = null == this.parent ? string.Empty : this.parent.ToString() + "->";
return prefix + this.property.Name;
}
}
}
// 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
- CodeFieldReferenceExpression.cs
- IIS7UserPrincipal.cs
- LoginView.cs
- Wizard.cs
- ArrayConverter.cs
- MethodAccessException.cs
- FormViewUpdatedEventArgs.cs
- ToolStripItemClickedEventArgs.cs
- AppDomainFactory.cs
- ListControl.cs
- HtmlInputHidden.cs
- CodePrimitiveExpression.cs
- Directory.cs
- CapabilitiesPattern.cs
- InputProviderSite.cs
- GlobalDataBindingHandler.cs
- Expressions.cs
- FormatterServices.cs
- Schema.cs
- CommandBindingCollection.cs
- ByeMessageApril2005.cs
- ObjectDataSourceSelectingEventArgs.cs
- ResourceReader.cs
- ExtenderProvidedPropertyAttribute.cs
- ServerValidateEventArgs.cs
- RecommendedAsConfigurableAttribute.cs
- AssemblyName.cs
- XmlSchemaAnnotation.cs
- EventListener.cs
- TaiwanCalendar.cs
- Win32SafeHandles.cs
- HwndStylusInputProvider.cs
- UnsafeNativeMethodsPenimc.cs
- InputEventArgs.cs
- TargetException.cs
- BaseDataBoundControl.cs
- OdbcStatementHandle.cs
- DynamicValidatorEventArgs.cs
- DodSequenceMerge.cs
- ExpressionCopier.cs
- BackgroundFormatInfo.cs
- peersecurityelement.cs
- FixedSOMPageElement.cs
- httpserverutility.cs
- ActivityBindForm.Designer.cs
- DBCommandBuilder.cs
- ListItemCollection.cs
- CollectionViewSource.cs
- IndexingContentUnit.cs
- TraceHwndHost.cs
- Exceptions.cs
- LogPolicy.cs
- DataGridViewCellLinkedList.cs
- _UriTypeConverter.cs
- MethodCallExpression.cs
- CodeAttributeDeclarationCollection.cs
- SafeSecurityHelper.cs
- WindowManager.cs
- WorkerRequest.cs
- SoapServerMessage.cs
- EnlistmentTraceIdentifier.cs
- DrawingContextDrawingContextWalker.cs
- StackOverflowException.cs
- ParseNumbers.cs
- CodeObject.cs
- TraceLevelStore.cs
- ObjectSet.cs
- LinqDataSourceDisposeEventArgs.cs
- TTSEngineProxy.cs
- BitmapDownload.cs
- SqlBinder.cs
- DetailsViewInsertEventArgs.cs
- DesignerActionMethodItem.cs
- ComboBox.cs
- GrammarBuilderDictation.cs
- lengthconverter.cs
- SqlStatistics.cs
- LogicalTreeHelper.cs
- QuaternionKeyFrameCollection.cs
- ObservableCollectionDefaultValueFactory.cs
- CodeAccessPermission.cs
- BinaryQueryOperator.cs
- XamlTemplateSerializer.cs
- EntityContainerAssociationSet.cs
- CaseInsensitiveComparer.cs
- SplineKeyFrames.cs
- ConditionBrowserDialog.cs
- BinaryReader.cs
- RenderData.cs
- iisPickupDirectory.cs
- XmlTextWriter.cs
- DictionaryEditChange.cs
- ConstNode.cs
- TypeConverterHelper.cs
- COM2ICategorizePropertiesHandler.cs
- TextTreeRootTextBlock.cs
- UnsafeNativeMethodsTablet.cs
- PersistChildrenAttribute.cs
- EncryptedPackage.cs
- SizeF.cs