diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs index 1a62dcee99..8d2c8dbd33 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs @@ -1,51 +1,67 @@ -#region Usings - -using System; +using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using ICSharpCode.SharpDevelop.Project; using System.Data.Entity.Design; -using System.CodeDom; using System.Data.Metadata.Edm; -using System.Xml.Linq; using System.IO; +using System.Xml.Linq; -#endregion +using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.Data.EDMDesigner.Core.IO { - public class EntityModelCodeGenerator : IO, ICustomTool - { - #region ICustomTool Member - - public void GenerateCode(FileProjectItem item, CustomToolContext context) - { - LanguageOption languageToGenerateCode = LanguageOption.GenerateCSharpCode; - - if (item.Project.Language != "C#") - languageToGenerateCode = LanguageOption.GenerateVBCode; - - XDocument edmxDocument = XDocument.Load(item.FileName); - XElement conceptualModelsElement = EDMXIO.ReadSection(edmxDocument, EDMXIO.EDMXSection.CSDL); - - if (conceptualModelsElement == null) - throw new ArgumentException("Input file is not a valid EDMX file."); - - XDocument csdlDocument = new XDocument(new XDeclaration("1.0", "utf-8", null), conceptualModelsElement.Element(XName.Get("Schema", csdlNamespace.NamespaceName))); - - string tempFileName = IO.GetTempFilenameWithExtension("csdl"); - csdlDocument.Save(tempFileName); + public class EntityModelCodeGenerator : IO, ICustomTool + { + public void GenerateCode(FileProjectItem item, CustomToolContext context) + { + XElement schema = GetModelSchema(item); + XDocument csdlDocument = CreateCsdlDocument(schema); + + string tempFileName = IO.GetTempFilenameWithExtension("csdl"); + csdlDocument.Save(tempFileName); - string outputFileName = context.GetOutputFileName(item, "Designer"); + LanguageOption languageToGenerateCode = GetLanguageOption(item); + string outputFileName = context.GetOutputFileName(item, "Designer"); - EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode); - IList edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName); - File.Delete(tempFileName); - - context.EnsureOutputFileIsInProject(item, outputFileName); - } + EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode); + AddNamespaceMapping(entityCodeGenerator, schema, context.OutputNamespace); + IList edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName); + File.Delete(tempFileName); + + context.EnsureOutputFileIsInProject(item, outputFileName); + } + + XElement GetModelSchema(FileProjectItem item) + { + XDocument edmxDocument = XDocument.Load(item.FileName); + XElement conceptualModelsElement = EDMXIO.ReadSection(edmxDocument, EDMXIO.EDMXSection.CSDL); + if (conceptualModelsElement == null) + throw new ArgumentException("Input file is not a valid EDMX file."); - #endregion - } + return conceptualModelsElement.Element(XName.Get("Schema", csdlNamespace.NamespaceName)); + } + + XDocument CreateCsdlDocument(XElement schema) + { + return new XDocument(new XDeclaration("1.0", "utf-8", null), schema); + } + + LanguageOption GetLanguageOption(FileProjectItem item) + { + if (item.Project.Language != "C#") + return LanguageOption.GenerateVBCode; + return LanguageOption.GenerateCSharpCode; + } + + void AddNamespaceMapping(EntityCodeGenerator entityCodeGenerator, XElement schema, string outputNamespace) + { + if (!String.IsNullOrEmpty(outputNamespace)) + AddNamespaceMapping(entityCodeGenerator, schema.Attribute(XName.Get("Namespace")), outputNamespace); + } + + void AddNamespaceMapping(EntityCodeGenerator entityCodeGenerator, XAttribute edmNamespace, string outputNamespace) + { + if (edmNamespace != null) + entityCodeGenerator.EdmToObjectNamespaceMap.Add(edmNamespace.Value, outputNamespace); + } + } }