EntityModelBuildProvider.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntityDesign / Design / System / Data / Entity / Design / AspNet / EntityModelBuildProvider.cs / 1305376 / EntityModelBuildProvider.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner       [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 

using System; 
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.CodeDom; 
using System.CodeDom.Compiler;
using System.Globalization; 
using System.IO; 
using System.Web;
using System.Web.Hosting; 
using System.Web.Compilation;
using System.Xml;
using System.Data.Entity.Design;
using System.Data.Metadata.Edm; 

namespace System.Data.Entity.Design.AspNet 
{ 
    /// 
    /// The ASP .NET Build provider for the CSDL in ADO .NET 
    /// 
    ///
    [BuildProviderAppliesTo(BuildProviderAppliesTo.Code)]
    public class EntityModelBuildProvider : System.Web.Compilation.BuildProvider 
    {
        ///  
        /// Default constructor 
        /// 
        public EntityModelBuildProvider() 
        {
        }

        ///  
        /// We want ASP .NET to always reset the app domain when we have to rebuild
        ///  
        ///  
        /// 
        public override BuildProviderResultFlags GetResultFlags(CompilerResults results) 
        {
            return BuildProviderResultFlags.ShutdownAppDomainOnChange;
        }
 
        /// 
        /// 
        ///  
        /// 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase")] 
        public override void GenerateCode(AssemblyBuilder assemblyBuilder)
        {
            // look at the assembly builder to see which language we should use in the App_Code directory
            EntityCodeGenerator generator = null; 
            if (assemblyBuilder.CodeDomProvider.FileExtension.ToLowerInvariant() == "cs")
            { 
                generator = new EntityCodeGenerator(LanguageOption.GenerateCSharpCode); 
            }
            else 
            {
                generator = new EntityCodeGenerator(LanguageOption.GenerateVBCode);
            }
 
            // generate the code for our CSDL file
            IList errors = null; 
            using (XmlReader input = XmlReader.Create(VirtualPathProvider.OpenFile(base.VirtualPath))) 
            {
                using (StringWriter output = new StringWriter(CultureInfo.InvariantCulture)) 
                {
                    // Read from input and generate into output, put errors in a class member
                    errors = generator.GenerateCode(input, output);
                    if (errors.Count == 0) 
                    {
                        output.Flush(); 
                        assemblyBuilder.AddCodeCompileUnit(this, new CodeSnippetCompileUnit(output.ToString())); 
                    }
                } 
            }

            // if there are errors, package this data into XmlExceptions and throw this
            // if we are in VS, the ASP .NET stack will place this information in the error pane 
            // if we are in the ASP .NET runtime, it will use this information to build the error page
            if (errors != null && errors.Count > 0) 
            { 
                XmlException inner = null;
                XmlException outer = null; 
                foreach (EdmSchemaError error in errors)
                {
                    outer = new XmlException(error.Message, inner, error.Line, error.Column);
                    inner = outer; 
                }
 
                throw outer; 
            }
 
            BuildProviderUtils.AddArtifactReference(assemblyBuilder, this, base.VirtualPath);
        }
    }
} 

// 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.Text;
using System.Diagnostics;
using System.CodeDom; 
using System.CodeDom.Compiler;
using System.Globalization; 
using System.IO; 
using System.Web;
using System.Web.Hosting; 
using System.Web.Compilation;
using System.Xml;
using System.Data.Entity.Design;
using System.Data.Metadata.Edm; 

namespace System.Data.Entity.Design.AspNet 
{ 
    /// 
    /// The ASP .NET Build provider for the CSDL in ADO .NET 
    /// 
    ///
    [BuildProviderAppliesTo(BuildProviderAppliesTo.Code)]
    public class EntityModelBuildProvider : System.Web.Compilation.BuildProvider 
    {
        ///  
        /// Default constructor 
        /// 
        public EntityModelBuildProvider() 
        {
        }

        ///  
        /// We want ASP .NET to always reset the app domain when we have to rebuild
        ///  
        ///  
        /// 
        public override BuildProviderResultFlags GetResultFlags(CompilerResults results) 
        {
            return BuildProviderResultFlags.ShutdownAppDomainOnChange;
        }
 
        /// 
        /// 
        ///  
        /// 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase")] 
        public override void GenerateCode(AssemblyBuilder assemblyBuilder)
        {
            // look at the assembly builder to see which language we should use in the App_Code directory
            EntityCodeGenerator generator = null; 
            if (assemblyBuilder.CodeDomProvider.FileExtension.ToLowerInvariant() == "cs")
            { 
                generator = new EntityCodeGenerator(LanguageOption.GenerateCSharpCode); 
            }
            else 
            {
                generator = new EntityCodeGenerator(LanguageOption.GenerateVBCode);
            }
 
            // generate the code for our CSDL file
            IList errors = null; 
            using (XmlReader input = XmlReader.Create(VirtualPathProvider.OpenFile(base.VirtualPath))) 
            {
                using (StringWriter output = new StringWriter(CultureInfo.InvariantCulture)) 
                {
                    // Read from input and generate into output, put errors in a class member
                    errors = generator.GenerateCode(input, output);
                    if (errors.Count == 0) 
                    {
                        output.Flush(); 
                        assemblyBuilder.AddCodeCompileUnit(this, new CodeSnippetCompileUnit(output.ToString())); 
                    }
                } 
            }

            // if there are errors, package this data into XmlExceptions and throw this
            // if we are in VS, the ASP .NET stack will place this information in the error pane 
            // if we are in the ASP .NET runtime, it will use this information to build the error page
            if (errors != null && errors.Count > 0) 
            { 
                XmlException inner = null;
                XmlException outer = null; 
                foreach (EdmSchemaError error in errors)
                {
                    outer = new XmlException(error.Message, inner, error.Line, error.Column);
                    inner = outer; 
                }
 
                throw outer; 
            }
 
            BuildProviderUtils.AddArtifactReference(assemblyBuilder, this, base.VirtualPath);
        }
    }
} 

// 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