Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Mapping / ObjectTypeMapping.cs / 1305376 / ObjectTypeMapping.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Diagnostics;
using System.Data.Metadata.Edm;
using System.Data.Common.Utils;
namespace System.Data.Mapping {
///
/// Represents the metadata for OCObjectMapping.
///
internal class ObjectTypeMapping : Map {
#region Constructors
///
/// Construct a new ObjectTypeMapping object
///
///
///
internal ObjectTypeMapping(EdmType clrType, EdmType cdmType) {
Debug.Assert(clrType.BuiltInTypeKind == cdmType.BuiltInTypeKind, "BuiltInTypeKind must be the same for both types");
this.m_clrType = clrType;
this.m_cdmType = cdmType;
identity = clrType.Identity + ObjectMslConstructs.IdentitySeperator + cdmType.Identity;
if (Helper.IsStructuralType(cdmType))
{
m_memberMapping = new Dictionary(((StructuralType)cdmType).Members.Count);
}
else
{
m_memberMapping = EmptyMemberMapping;
}
}
#endregion
#region Fields
#region Internal
private readonly EdmType m_clrType; //type on the Clr side that is being mapped
private readonly EdmType m_cdmType; //type on the Cdm side that is being mapped
private readonly string identity;
private readonly Dictionary m_memberMapping; //Indexes into the member mappings collection based on clr member name
private static readonly Dictionary EmptyMemberMapping
= new Dictionary(0);
#endregion
#endregion
#region Properties
///
/// Gets the type kind for this item
///
public override BuiltInTypeKind BuiltInTypeKind {
get { return BuiltInTypeKind.MetadataItem; }
}
///
/// The reference to the Clr type in Metadata
/// that participates in this mapping instance
///
internal EdmType ClrType {
get {
return this.m_clrType;
}
}
///
/// The reference to the Cdm type in Metadata
/// that participates in this mapping instance
///
internal override MetadataItem EdmItem {
get {
return this.EdmType;
}
}
///
/// The reference to the Cdm type in Metadata
/// that participates in this mapping instance
///
internal EdmType EdmType {
get {
return this.m_cdmType;
}
}
///
/// Returns the Identity of ObjectTypeMapping.
/// The identity for an Object Type Map is the concatenation of
/// CLR Type Idntity + ':' + CDM Type Identity
///
internal override string Identity {
get {
return identity;
}
}
#endregion
#region Methods
///
/// get a MemberMap for the member name specified
///
/// the name of the CDM member for which map needs to be retrieved
internal ObjectPropertyMapping GetPropertyMap(String propertyName)
{
ObjectMemberMapping memberMapping = GetMemberMap(propertyName, false /*ignoreCase*/);
if (memberMapping != null &&
memberMapping.MemberMappingKind == MemberMappingKind.ScalarPropertyMapping ||
memberMapping.MemberMappingKind == MemberMappingKind.ComplexPropertyMapping)
{
return (ObjectPropertyMapping)memberMapping;
}
return null;
}
///
/// Add a member mapping as a child of this object mapping
///
/// child property mapping to be added
internal void AddMemberMap(ObjectMemberMapping memberMapping) {
Debug.Assert(memberMapping.ClrMember.Name == memberMapping.EdmMember.Name,
"Both clrmember and edmMember name must be the same");
//Check to see if either the Clr member or the Cdm member specified in this
//type has already been mapped.
Debug.Assert(!m_memberMapping.ContainsKey(memberMapping.EdmMember.Name));
Debug.Assert(!Type.ReferenceEquals(m_memberMapping, EmptyMemberMapping),
"Make sure you don't add anything to the static emtpy member mapping");
m_memberMapping.Add(memberMapping.EdmMember.Name, memberMapping);
}
///
/// Returns the member map for the given clr member
///
///
///
///
internal ObjectMemberMapping GetMemberMapForClrMember(string clrMemberName, bool ignoreCase)
{
return GetMemberMap(clrMemberName, ignoreCase);
}
///
/// returns the member mapping for the given member
///
///
///
///
private ObjectMemberMapping GetMemberMap(string propertyName, bool ignoreCase)
{
EntityUtil.CheckStringArgument(propertyName, "propertyName");
ObjectMemberMapping memberMapping = null;
if (!ignoreCase)
{
//First get the index of the member map from the clr indexs
m_memberMapping.TryGetValue(propertyName, out memberMapping);
}
else
{
foreach (KeyValuePair keyValuePair in m_memberMapping)
{
if (keyValuePair.Key.Equals(propertyName, StringComparison.OrdinalIgnoreCase))
{
if (memberMapping != null)
{
throw new MappingException(System.Data.Entity.Strings.Mapping_Duplicate_PropertyMap_CaseInsensitive(
propertyName));
}
memberMapping = keyValuePair.Value;
}
}
}
return memberMapping;
}
///
/// Overriding System.Object.ToString to provide better String representation
/// for this type.
///
public override string ToString()
{
return this.Identity;
}
#endregion
}
}
// 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.Collections.ObjectModel;
using System.Text;
using System.Diagnostics;
using System.Data.Metadata.Edm;
using System.Data.Common.Utils;
namespace System.Data.Mapping {
///
/// Represents the metadata for OCObjectMapping.
///
internal class ObjectTypeMapping : Map {
#region Constructors
///
/// Construct a new ObjectTypeMapping object
///
///
///
internal ObjectTypeMapping(EdmType clrType, EdmType cdmType) {
Debug.Assert(clrType.BuiltInTypeKind == cdmType.BuiltInTypeKind, "BuiltInTypeKind must be the same for both types");
this.m_clrType = clrType;
this.m_cdmType = cdmType;
identity = clrType.Identity + ObjectMslConstructs.IdentitySeperator + cdmType.Identity;
if (Helper.IsStructuralType(cdmType))
{
m_memberMapping = new Dictionary(((StructuralType)cdmType).Members.Count);
}
else
{
m_memberMapping = EmptyMemberMapping;
}
}
#endregion
#region Fields
#region Internal
private readonly EdmType m_clrType; //type on the Clr side that is being mapped
private readonly EdmType m_cdmType; //type on the Cdm side that is being mapped
private readonly string identity;
private readonly Dictionary m_memberMapping; //Indexes into the member mappings collection based on clr member name
private static readonly Dictionary EmptyMemberMapping
= new Dictionary(0);
#endregion
#endregion
#region Properties
///
/// Gets the type kind for this item
///
public override BuiltInTypeKind BuiltInTypeKind {
get { return BuiltInTypeKind.MetadataItem; }
}
///
/// The reference to the Clr type in Metadata
/// that participates in this mapping instance
///
internal EdmType ClrType {
get {
return this.m_clrType;
}
}
///
/// The reference to the Cdm type in Metadata
/// that participates in this mapping instance
///
internal override MetadataItem EdmItem {
get {
return this.EdmType;
}
}
///
/// The reference to the Cdm type in Metadata
/// that participates in this mapping instance
///
internal EdmType EdmType {
get {
return this.m_cdmType;
}
}
///
/// Returns the Identity of ObjectTypeMapping.
/// The identity for an Object Type Map is the concatenation of
/// CLR Type Idntity + ':' + CDM Type Identity
///
internal override string Identity {
get {
return identity;
}
}
#endregion
#region Methods
///
/// get a MemberMap for the member name specified
///
/// the name of the CDM member for which map needs to be retrieved
internal ObjectPropertyMapping GetPropertyMap(String propertyName)
{
ObjectMemberMapping memberMapping = GetMemberMap(propertyName, false /*ignoreCase*/);
if (memberMapping != null &&
memberMapping.MemberMappingKind == MemberMappingKind.ScalarPropertyMapping ||
memberMapping.MemberMappingKind == MemberMappingKind.ComplexPropertyMapping)
{
return (ObjectPropertyMapping)memberMapping;
}
return null;
}
///
/// Add a member mapping as a child of this object mapping
///
/// child property mapping to be added
internal void AddMemberMap(ObjectMemberMapping memberMapping) {
Debug.Assert(memberMapping.ClrMember.Name == memberMapping.EdmMember.Name,
"Both clrmember and edmMember name must be the same");
//Check to see if either the Clr member or the Cdm member specified in this
//type has already been mapped.
Debug.Assert(!m_memberMapping.ContainsKey(memberMapping.EdmMember.Name));
Debug.Assert(!Type.ReferenceEquals(m_memberMapping, EmptyMemberMapping),
"Make sure you don't add anything to the static emtpy member mapping");
m_memberMapping.Add(memberMapping.EdmMember.Name, memberMapping);
}
///
/// Returns the member map for the given clr member
///
///
///
///
internal ObjectMemberMapping GetMemberMapForClrMember(string clrMemberName, bool ignoreCase)
{
return GetMemberMap(clrMemberName, ignoreCase);
}
///
/// returns the member mapping for the given member
///
///
///
///
private ObjectMemberMapping GetMemberMap(string propertyName, bool ignoreCase)
{
EntityUtil.CheckStringArgument(propertyName, "propertyName");
ObjectMemberMapping memberMapping = null;
if (!ignoreCase)
{
//First get the index of the member map from the clr indexs
m_memberMapping.TryGetValue(propertyName, out memberMapping);
}
else
{
foreach (KeyValuePair keyValuePair in m_memberMapping)
{
if (keyValuePair.Key.Equals(propertyName, StringComparison.OrdinalIgnoreCase))
{
if (memberMapping != null)
{
throw new MappingException(System.Data.Entity.Strings.Mapping_Duplicate_PropertyMap_CaseInsensitive(
propertyName));
}
memberMapping = keyValuePair.Value;
}
}
}
return memberMapping;
}
///
/// Overriding System.Object.ToString to provide better String representation
/// for this type.
///
public override string ToString()
{
return this.Identity;
}
#endregion
}
}
// 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
- GB18030Encoding.cs
- StringUtil.cs
- codemethodreferenceexpression.cs
- WorkflowFileItem.cs
- RegistryKey.cs
- ToolStripProgressBar.cs
- DataRelationCollection.cs
- RoleManagerSection.cs
- URLString.cs
- DataGridViewTextBoxColumn.cs
- Parser.cs
- TemplateControlParser.cs
- PreloadedPackages.cs
- ComponentTray.cs
- HwndHostAutomationPeer.cs
- BufferModeSettings.cs
- GeometryGroup.cs
- FloaterParaClient.cs
- StrokeCollection2.cs
- ConfigXmlWhitespace.cs
- MarkupObject.cs
- XmlSchemaCompilationSettings.cs
- IResourceProvider.cs
- FieldBuilder.cs
- SqlDependency.cs
- SqlNotificationEventArgs.cs
- SpecialFolderEnumConverter.cs
- ScriptMethodAttribute.cs
- TextUtf8RawTextWriter.cs
- ScaleTransform.cs
- WebPartEditorOkVerb.cs
- EventProviderClassic.cs
- Buffer.cs
- InputLanguage.cs
- SQLConvert.cs
- Pkcs9Attribute.cs
- DataTableNewRowEvent.cs
- PageSettings.cs
- Timeline.cs
- VisualTreeUtils.cs
- SqlFactory.cs
- WindowsFormsLinkLabel.cs
- Content.cs
- ContainerParaClient.cs
- RSAOAEPKeyExchangeDeformatter.cs
- DictionaryTraceRecord.cs
- HandleCollector.cs
- Walker.cs
- CheckableControlBaseAdapter.cs
- CodeGenerator.cs
- NamedPipeTransportBindingElement.cs
- DotExpr.cs
- RegexReplacement.cs
- SeverityFilter.cs
- SimpleHandlerFactory.cs
- SchemaCollectionCompiler.cs
- future.cs
- KnownBoxes.cs
- MemberRelationshipService.cs
- XmlWriterSettings.cs
- DesignerVerbCollection.cs
- ContextQuery.cs
- FocusTracker.cs
- ListItemCollection.cs
- Command.cs
- Attributes.cs
- KeyPressEvent.cs
- PageBuildProvider.cs
- HttpChannelFactory.cs
- ApplicationContext.cs
- __TransparentProxy.cs
- EventProviderTraceListener.cs
- DataRowChangeEvent.cs
- CanonicalFormWriter.cs
- RemotingSurrogateSelector.cs
- ComponentGlyph.cs
- SessionPageStateSection.cs
- TargetControlTypeCache.cs
- MimeFormImporter.cs
- mda.cs
- GenerateHelper.cs
- securitycriticaldataClass.cs
- Module.cs
- ViewManager.cs
- CompoundFileIOPermission.cs
- PublisherIdentityPermission.cs
- HyperLinkStyle.cs
- QilStrConcat.cs
- StreamReader.cs
- BindingMAnagerBase.cs
- UpdateTranslator.cs
- RtfFormatStack.cs
- HtmlTableRow.cs
- ThemeDictionaryExtension.cs
- SystemResources.cs
- TextHidden.cs
- DomainConstraint.cs
- QilScopedVisitor.cs
- ColorTranslator.cs
- ActivationArguments.cs