Browse Source

EntityModelCodeGenerator custom tool now generates code using the custom tool's namespace property.

pull/25/merge
Matt Ward 13 years ago
parent
commit
0604f8d203
  1. 64
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs

64
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs

@ -1,51 +1,67 @@ @@ -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)));
XElement schema = GetModelSchema(item);
XDocument csdlDocument = CreateCsdlDocument(schema);
string tempFileName = IO.GetTempFilenameWithExtension("csdl");
csdlDocument.Save(tempFileName);
LanguageOption languageToGenerateCode = GetLanguageOption(item);
string outputFileName = context.GetOutputFileName(item, "Designer");
EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode);
AddNamespaceMapping(entityCodeGenerator, schema, context.OutputNamespace);
IList<EdmSchemaError> edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName);
File.Delete(tempFileName);
context.EnsureOutputFileIsInProject(item, outputFileName);
}
#endregion
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.");
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);
}
}
}

Loading…
Cancel
Save