1 changed files with 55 additions and 39 deletions
@ -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))); |
||||
|
||||
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<EdmSchemaError> edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName); |
||||
File.Delete(tempFileName); |
||||
|
||||
context.EnsureOutputFileIsInProject(item, outputFileName); |
||||
} |
||||
EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode); |
||||
AddNamespaceMapping(entityCodeGenerator, schema, context.OutputNamespace); |
||||
IList<EdmSchemaError> 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); |
||||
} |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue