util.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / internal / materialization / util.cs / 1305376 / util.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// [....] 
//-----------------------------------------------------------------------------
 
using System.Data.Metadata.Edm; 
using System.Data.Mapping;
namespace System.Data.Common.Internal.Materialization 
{
    static class Util
    {
        ///  
        /// Retrieves a mapping to CLR type for the given EDM type. Assumes the MetadataWorkspace has no
        ///  
        internal static ObjectTypeMapping GetObjectMapping(EdmType type, MetadataWorkspace workspace) 
        {
            // Check if the workspace has cspace item collection registered with it. If not, then its a case 
            // of public materializer trying to create objects from PODR or EntityDataReader with no context.
            ItemCollection collection;
            if (workspace.TryGetItemCollection(DataSpace.CSpace, out collection))
            { 
                return (ObjectTypeMapping)workspace.GetMap(type, DataSpace.OCSpace);
            } 
            else 
            {
                EdmType ospaceType; 
                EdmType cspaceType;
                // If its a case of EntityDataReader with no context, the typeUsage which is passed in must contain
                // a cspace type. We need to look up an OSpace type in the ospace item collection and then create
                // ocMapping 
                if (type.DataSpace == DataSpace.CSpace)
                { 
                    // if its a primitive type, then the names will be different for CSpace type and OSpace type 
                    if (Helper.IsPrimitiveType(type))
                    { 
                        ospaceType = workspace.GetMappedPrimitiveType(((PrimitiveType)type).PrimitiveTypeKind, DataSpace.OSpace);
                    }
                    else
                    { 
                        // Metadata will throw if there is no item with this identity present.
                        // Is this exception fine or does object materializer code wants to wrap and throw a new exception 
                        ospaceType = workspace.GetItem(type.FullName, DataSpace.OSpace); 
                    }
                    cspaceType = type; 
                }
                else
                {
                    // In case of PODR, there is no cspace at all. We must create a fake ocmapping, with ospace types 
                    // on both the ends
                    ospaceType = type; 
                    cspaceType = type; 
                }
 
                // This condition must be hit only when someone is trying to materialize a legacy data reader and we
                // don't have the CSpace metadata.
                if (!Helper.IsPrimitiveType(ospaceType) && !Helper.IsEntityType(ospaceType) && !Helper.IsComplexType(ospaceType))
                { 
                    throw EntityUtil.MaterializerUnsupportedType();
                } 
 
                ObjectTypeMapping typeMapping;
 
                if (Helper.IsPrimitiveType(ospaceType))
                {
                    typeMapping = new ObjectTypeMapping(ospaceType, cspaceType);
                } 
                else
                { 
                    typeMapping = DefaultObjectMappingItemCollection.LoadObjectMapping(cspaceType, ospaceType, null); 
                }
 
                return typeMapping;
            }
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK