Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Objects / ObjectStateManagerMetadata.cs / 1305376 / ObjectStateManagerMetadata.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Metadata.Edm;
using System.Data.Mapping;
using System.Diagnostics;
namespace System.Data.Objects
{
internal struct EntitySetQualifiedType : IEqualityComparer
{
internal static readonly IEqualityComparer EqualityComparer = new EntitySetQualifiedType();
internal readonly Type ClrType;
internal readonly EntitySet EntitySet;
internal EntitySetQualifiedType(Type type, EntitySet set)
{
Debug.Assert(null != type, "null Type");
Debug.Assert(null != set, "null EntitySet");
Debug.Assert(null != set.EntityContainer, "null EntityContainer");
Debug.Assert(null != set.EntityContainer.Name, "null EntityContainer.Name");
ClrType = EntityUtil.GetEntityIdentityType(type);
EntitySet = set;
}
public bool Equals(EntitySetQualifiedType x, EntitySetQualifiedType y)
{
return (Object.ReferenceEquals(x.ClrType, y.ClrType) &&
Object.ReferenceEquals(x.EntitySet, y.EntitySet));
}
public int GetHashCode(EntitySetQualifiedType obj)
{
return unchecked(obj.ClrType.GetHashCode() +
obj.EntitySet.Name.GetHashCode() +
obj.EntitySet.EntityContainer.Name.GetHashCode());
}
}
internal sealed class StateManagerMemberMetadata
{
private readonly EdmProperty _clrProperty; // may be null if shadowState
private readonly EdmProperty _edmProperty;
private readonly bool _isPartOfKey;
private readonly bool _isComplexType;
internal StateManagerMemberMetadata(ObjectPropertyMapping memberMap, EdmProperty memberMetadata, bool isPartOfKey)
{
// if memberMap is null, then this is a shadowstate
Debug.Assert(null != memberMap, "shadowstate not supported");
Debug.Assert(null != memberMetadata, "CSpace should never be null");
_clrProperty = memberMap.ClrProperty;
_edmProperty = memberMetadata;
_isPartOfKey = isPartOfKey;
_isComplexType = (Helper.IsEntityType(_edmProperty.TypeUsage.EdmType) ||
Helper.IsComplexType(_edmProperty.TypeUsage.EdmType));
}
internal string CLayerName
{
get
{
return _edmProperty.Name;
}
}
internal Type ClrType
{
get
{
Debug.Assert(null != _clrProperty, "shadowstate not supported");
return _clrProperty.TypeUsage.EdmType.ClrType;
//return ((null != _clrProperty)
// ? _clrProperty.TypeUsage.EdmType.ClrType
// : (Helper.IsComplexType(_edmProperty)
// ? typeof(DbDataRecord)
// : ((PrimitiveType)_edmProperty.TypeUsage.EdmType).ClrEquivalentType));
}
}
internal bool IsComplex
{
get
{
return _isComplexType;
}
}
internal EdmProperty CdmMetadata
{
get
{
return _edmProperty;
}
}
internal EdmProperty ClrMetadata
{
get
{
Debug.Assert(null != _clrProperty, "shadowstate not supported");
return _clrProperty;
}
}
internal bool IsPartOfKey
{
get
{
return _isPartOfKey;
}
}
public object GetValue(object userObject) // wrapp it in cacheentry
{
Debug.Assert(null != _clrProperty, "shadowstate not supported");
object dataObject = LightweightCodeGenerator.GetValue(_clrProperty, userObject);
return dataObject;
}
public void SetValue(object userObject, object value) // if record , unwrapp to object, use materializer in cacheentry
{
Debug.Assert(null != _clrProperty, "shadowstate not supported");
if (DBNull.Value == value)
{
value = null;
}
if (IsComplex && value == null)
{
throw EntityUtil.NullableComplexTypesNotSupported(CLayerName);
}
LightweightCodeGenerator.SetValue(_clrProperty, userObject, value);
}
}
internal sealed class StateManagerTypeMetadata
{
private readonly TypeUsage _typeUsage; // CSpace
private readonly ObjectTypeMapping _ocObjectMap;
private readonly StateManagerMemberMetadata[] _members;
private readonly Dictionary _objectNameToOrdinal;
private readonly Dictionary _cLayerNameToOrdinal;
private readonly DataRecordInfo _recordInfo;
internal StateManagerTypeMetadata(EdmType edmType, ObjectTypeMapping mapping)
{
Debug.Assert(null != edmType, "null EdmType");
Debug.Assert(Helper.IsEntityType(edmType) ||
Helper.IsComplexType(edmType),
"not Complex or EntityType");
Debug.Assert(Object.ReferenceEquals(mapping, null) ||
Object.ReferenceEquals(mapping.EdmType, edmType),
"different EdmType instance");
_typeUsage = TypeUsage.Create(edmType);
_recordInfo = new DataRecordInfo(_typeUsage);
_ocObjectMap = mapping;
ReadOnlyMetadataCollection members = TypeHelpers.GetProperties(edmType);
_members = new StateManagerMemberMetadata[members.Count];
_objectNameToOrdinal = new Dictionary(members.Count);
_cLayerNameToOrdinal = new Dictionary(members.Count);
ReadOnlyMetadataCollection keyMembers = null;
if (Helper.IsEntityType(edmType))
{
keyMembers = ((EntityType)edmType).KeyMembers;
}
for (int i = 0; i < _members.Length; ++i)
{
EdmProperty member = members[i];
ObjectPropertyMapping memberMap = null;
if (null != mapping)
{
memberMap = mapping.GetPropertyMap(member.Name);
if (null != memberMap)
{
_objectNameToOrdinal.Add(memberMap.ClrProperty.Name, i); // olayer name
}
}
_cLayerNameToOrdinal.Add(member.Name, i); // clayer name
// Determine whether this member is part of the identity of the entity.
_members[i] = new StateManagerMemberMetadata(memberMap, member, ((null != keyMembers) && keyMembers.Contains(member)));
}
}
internal TypeUsage CdmMetadata
{
get
{
return _typeUsage;
}
}
internal DataRecordInfo DataRecordInfo
{
get { return _recordInfo; }
}
internal int FieldCount
{
get
{
return _members.Length;
}
}
internal Type GetFieldType(int ordinal)
{
return Member(ordinal).ClrType;
}
internal StateManagerMemberMetadata Member(int ordinal)
{
if (unchecked((uint)ordinal < (uint)_members.Length))
{
return _members[ordinal];
}
throw EntityUtil.ArgumentOutOfRange("ordinal");
}
internal string CLayerMemberName(int ordinal)
{
return Member(ordinal).CLayerName;
}
internal int GetOrdinalforOLayerMemberName(string name)
{
int ordinal;
if (String.IsNullOrEmpty(name) || !_objectNameToOrdinal.TryGetValue(name, out ordinal))
{
ordinal = -1;
}
return ordinal;
}
internal int GetOrdinalforCLayerMemberName(string name)
{
int ordinal;
if (String.IsNullOrEmpty(name) || !_cLayerNameToOrdinal.TryGetValue(name, out ordinal))
{
ordinal = -1;
}
return ordinal;
}
internal bool IsMemberPartofShadowState(int ordinal)
{
//
Debug.Assert(Member(ordinal) != null,
"The only case where Member(ordinal) can be null is if the property is in shadow state. " +
"When shadow state support is added, this assert should never fire.");
return (null == Member(ordinal).ClrMetadata);
}
}
}
// 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.Data.Common;
using System.Data.Metadata.Edm;
using System.Data.Mapping;
using System.Diagnostics;
namespace System.Data.Objects
{
internal struct EntitySetQualifiedType : IEqualityComparer
{
internal static readonly IEqualityComparer EqualityComparer = new EntitySetQualifiedType();
internal readonly Type ClrType;
internal readonly EntitySet EntitySet;
internal EntitySetQualifiedType(Type type, EntitySet set)
{
Debug.Assert(null != type, "null Type");
Debug.Assert(null != set, "null EntitySet");
Debug.Assert(null != set.EntityContainer, "null EntityContainer");
Debug.Assert(null != set.EntityContainer.Name, "null EntityContainer.Name");
ClrType = EntityUtil.GetEntityIdentityType(type);
EntitySet = set;
}
public bool Equals(EntitySetQualifiedType x, EntitySetQualifiedType y)
{
return (Object.ReferenceEquals(x.ClrType, y.ClrType) &&
Object.ReferenceEquals(x.EntitySet, y.EntitySet));
}
public int GetHashCode(EntitySetQualifiedType obj)
{
return unchecked(obj.ClrType.GetHashCode() +
obj.EntitySet.Name.GetHashCode() +
obj.EntitySet.EntityContainer.Name.GetHashCode());
}
}
internal sealed class StateManagerMemberMetadata
{
private readonly EdmProperty _clrProperty; // may be null if shadowState
private readonly EdmProperty _edmProperty;
private readonly bool _isPartOfKey;
private readonly bool _isComplexType;
internal StateManagerMemberMetadata(ObjectPropertyMapping memberMap, EdmProperty memberMetadata, bool isPartOfKey)
{
// if memberMap is null, then this is a shadowstate
Debug.Assert(null != memberMap, "shadowstate not supported");
Debug.Assert(null != memberMetadata, "CSpace should never be null");
_clrProperty = memberMap.ClrProperty;
_edmProperty = memberMetadata;
_isPartOfKey = isPartOfKey;
_isComplexType = (Helper.IsEntityType(_edmProperty.TypeUsage.EdmType) ||
Helper.IsComplexType(_edmProperty.TypeUsage.EdmType));
}
internal string CLayerName
{
get
{
return _edmProperty.Name;
}
}
internal Type ClrType
{
get
{
Debug.Assert(null != _clrProperty, "shadowstate not supported");
return _clrProperty.TypeUsage.EdmType.ClrType;
//return ((null != _clrProperty)
// ? _clrProperty.TypeUsage.EdmType.ClrType
// : (Helper.IsComplexType(_edmProperty)
// ? typeof(DbDataRecord)
// : ((PrimitiveType)_edmProperty.TypeUsage.EdmType).ClrEquivalentType));
}
}
internal bool IsComplex
{
get
{
return _isComplexType;
}
}
internal EdmProperty CdmMetadata
{
get
{
return _edmProperty;
}
}
internal EdmProperty ClrMetadata
{
get
{
Debug.Assert(null != _clrProperty, "shadowstate not supported");
return _clrProperty;
}
}
internal bool IsPartOfKey
{
get
{
return _isPartOfKey;
}
}
public object GetValue(object userObject) // wrapp it in cacheentry
{
Debug.Assert(null != _clrProperty, "shadowstate not supported");
object dataObject = LightweightCodeGenerator.GetValue(_clrProperty, userObject);
return dataObject;
}
public void SetValue(object userObject, object value) // if record , unwrapp to object, use materializer in cacheentry
{
Debug.Assert(null != _clrProperty, "shadowstate not supported");
if (DBNull.Value == value)
{
value = null;
}
if (IsComplex && value == null)
{
throw EntityUtil.NullableComplexTypesNotSupported(CLayerName);
}
LightweightCodeGenerator.SetValue(_clrProperty, userObject, value);
}
}
internal sealed class StateManagerTypeMetadata
{
private readonly TypeUsage _typeUsage; // CSpace
private readonly ObjectTypeMapping _ocObjectMap;
private readonly StateManagerMemberMetadata[] _members;
private readonly Dictionary _objectNameToOrdinal;
private readonly Dictionary _cLayerNameToOrdinal;
private readonly DataRecordInfo _recordInfo;
internal StateManagerTypeMetadata(EdmType edmType, ObjectTypeMapping mapping)
{
Debug.Assert(null != edmType, "null EdmType");
Debug.Assert(Helper.IsEntityType(edmType) ||
Helper.IsComplexType(edmType),
"not Complex or EntityType");
Debug.Assert(Object.ReferenceEquals(mapping, null) ||
Object.ReferenceEquals(mapping.EdmType, edmType),
"different EdmType instance");
_typeUsage = TypeUsage.Create(edmType);
_recordInfo = new DataRecordInfo(_typeUsage);
_ocObjectMap = mapping;
ReadOnlyMetadataCollection members = TypeHelpers.GetProperties(edmType);
_members = new StateManagerMemberMetadata[members.Count];
_objectNameToOrdinal = new Dictionary(members.Count);
_cLayerNameToOrdinal = new Dictionary(members.Count);
ReadOnlyMetadataCollection keyMembers = null;
if (Helper.IsEntityType(edmType))
{
keyMembers = ((EntityType)edmType).KeyMembers;
}
for (int i = 0; i < _members.Length; ++i)
{
EdmProperty member = members[i];
ObjectPropertyMapping memberMap = null;
if (null != mapping)
{
memberMap = mapping.GetPropertyMap(member.Name);
if (null != memberMap)
{
_objectNameToOrdinal.Add(memberMap.ClrProperty.Name, i); // olayer name
}
}
_cLayerNameToOrdinal.Add(member.Name, i); // clayer name
// Determine whether this member is part of the identity of the entity.
_members[i] = new StateManagerMemberMetadata(memberMap, member, ((null != keyMembers) && keyMembers.Contains(member)));
}
}
internal TypeUsage CdmMetadata
{
get
{
return _typeUsage;
}
}
internal DataRecordInfo DataRecordInfo
{
get { return _recordInfo; }
}
internal int FieldCount
{
get
{
return _members.Length;
}
}
internal Type GetFieldType(int ordinal)
{
return Member(ordinal).ClrType;
}
internal StateManagerMemberMetadata Member(int ordinal)
{
if (unchecked((uint)ordinal < (uint)_members.Length))
{
return _members[ordinal];
}
throw EntityUtil.ArgumentOutOfRange("ordinal");
}
internal string CLayerMemberName(int ordinal)
{
return Member(ordinal).CLayerName;
}
internal int GetOrdinalforOLayerMemberName(string name)
{
int ordinal;
if (String.IsNullOrEmpty(name) || !_objectNameToOrdinal.TryGetValue(name, out ordinal))
{
ordinal = -1;
}
return ordinal;
}
internal int GetOrdinalforCLayerMemberName(string name)
{
int ordinal;
if (String.IsNullOrEmpty(name) || !_cLayerNameToOrdinal.TryGetValue(name, out ordinal))
{
ordinal = -1;
}
return ordinal;
}
internal bool IsMemberPartofShadowState(int ordinal)
{
//
Debug.Assert(Member(ordinal) != null,
"The only case where Member(ordinal) can be null is if the property is in shadow state. " +
"When shadow state support is added, this assert should never fire.");
return (null == Member(ordinal).ClrMetadata);
}
}
}
// 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
- ImageClickEventArgs.cs
- ToolboxItemAttribute.cs
- DocumentPageHost.cs
- SendMailErrorEventArgs.cs
- PropertyItemInternal.cs
- MenuTracker.cs
- UnmanagedMemoryAccessor.cs
- MasterPage.cs
- ActivityScheduledRecord.cs
- TreeView.cs
- OutputWindow.cs
- DataTableClearEvent.cs
- Sorting.cs
- ScrollableControl.cs
- Relationship.cs
- HorizontalAlignConverter.cs
- HtmlPanelAdapter.cs
- RegisteredHiddenField.cs
- ListViewItemEventArgs.cs
- Msec.cs
- SqlTriggerAttribute.cs
- ConfigurationPermission.cs
- IndexerHelper.cs
- ScrollBar.cs
- DtrList.cs
- SamlDelegatingWriter.cs
- UInt64Converter.cs
- VirtualPath.cs
- SafeLocalMemHandle.cs
- RawMouseInputReport.cs
- XmlSchemaComplexType.cs
- TableLayoutSettings.cs
- ProxyHelper.cs
- PartManifestEntry.cs
- TextBoxLine.cs
- _DomainName.cs
- AttachmentService.cs
- XmlCustomFormatter.cs
- FunctionParameter.cs
- ClientRolePrincipal.cs
- DefaultShape.cs
- ListBoxItemWrapperAutomationPeer.cs
- Activator.cs
- AppliesToBehaviorDecisionTable.cs
- TransformerTypeCollection.cs
- FactoryRecord.cs
- CodeMethodReturnStatement.cs
- ShellProvider.cs
- DBCommand.cs
- ThemeInfoAttribute.cs
- _ConnectionGroup.cs
- ZoneButton.cs
- Mutex.cs
- TextTreeUndoUnit.cs
- SiteMapNodeCollection.cs
- X509CertificateStore.cs
- IDispatchConstantAttribute.cs
- MethodRental.cs
- InputMethodStateChangeEventArgs.cs
- CanonicalXml.cs
- HostedHttpRequestAsyncResult.cs
- IncrementalCompileAnalyzer.cs
- DbXmlEnabledProviderManifest.cs
- SetterBaseCollection.cs
- InstanceDescriptor.cs
- PagePropertiesChangingEventArgs.cs
- AtlasWeb.Designer.cs
- FilteredAttributeCollection.cs
- MenuItemCollectionEditor.cs
- BaseDataBoundControl.cs
- TextBreakpoint.cs
- DataIdProcessor.cs
- HttpInputStream.cs
- RSAPKCS1SignatureFormatter.cs
- PathSegment.cs
- CommandBindingCollection.cs
- SecurityAlgorithmSuiteConverter.cs
- WindowsSpinner.cs
- VisualStyleTypesAndProperties.cs
- LingerOption.cs
- WebPartAddingEventArgs.cs
- WebPartRestoreVerb.cs
- ConfigXmlAttribute.cs
- RepeaterItemCollection.cs
- ScopelessEnumAttribute.cs
- HttpWrapper.cs
- LinkButton.cs
- SendMessageRecord.cs
- ThemeDictionaryExtension.cs
- HttpCachePolicyBase.cs
- OutputCacheSettingsSection.cs
- IntegerValidatorAttribute.cs
- ParserOptions.cs
- SecurityVerifiedMessage.cs
- CatalogPartChrome.cs
- ThreadStateException.cs
- OutOfProcStateClientManager.cs
- PageFunction.cs
- ExtractCollection.cs
- Visual.cs