1 changed files with 55 additions and 39 deletions
@ -1,51 +1,67 @@ |
|||||||
#region Usings
|
using System; |
||||||
|
|
||||||
using System; |
|
||||||
using System.Collections.Generic; |
using System.Collections.Generic; |
||||||
using System.Linq; |
|
||||||
using System.Text; |
|
||||||
using ICSharpCode.SharpDevelop.Project; |
|
||||||
using System.Data.Entity.Design; |
using System.Data.Entity.Design; |
||||||
using System.CodeDom; |
|
||||||
using System.Data.Metadata.Edm; |
using System.Data.Metadata.Edm; |
||||||
using System.Xml.Linq; |
|
||||||
using System.IO; |
using System.IO; |
||||||
|
using System.Xml.Linq; |
||||||
|
|
||||||
#endregion
|
using ICSharpCode.SharpDevelop.Project; |
||||||
|
|
||||||
namespace ICSharpCode.Data.EDMDesigner.Core.IO |
namespace ICSharpCode.Data.EDMDesigner.Core.IO |
||||||
{ |
{ |
||||||
public class EntityModelCodeGenerator : IO, ICustomTool |
public class EntityModelCodeGenerator : IO, ICustomTool |
||||||
{ |
{ |
||||||
#region ICustomTool Member
|
public void GenerateCode(FileProjectItem item, CustomToolContext context) |
||||||
|
{ |
||||||
public void GenerateCode(FileProjectItem item, CustomToolContext context) |
XElement schema = GetModelSchema(item); |
||||||
{ |
XDocument csdlDocument = CreateCsdlDocument(schema); |
||||||
LanguageOption languageToGenerateCode = LanguageOption.GenerateCSharpCode; |
|
||||||
|
string tempFileName = IO.GetTempFilenameWithExtension("csdl"); |
||||||
if (item.Project.Language != "C#") |
csdlDocument.Save(tempFileName); |
||||||
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); |
|
||||||
|
|
||||||
string outputFileName = context.GetOutputFileName(item, "Designer"); |
LanguageOption languageToGenerateCode = GetLanguageOption(item); |
||||||
|
string outputFileName = context.GetOutputFileName(item, "Designer"); |
||||||
|
|
||||||
EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode); |
EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode); |
||||||
IList<EdmSchemaError> edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName); |
AddNamespaceMapping(entityCodeGenerator, schema, context.OutputNamespace); |
||||||
File.Delete(tempFileName); |
IList<EdmSchemaError> edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName); |
||||||
|
File.Delete(tempFileName); |
||||||
context.EnsureOutputFileIsInProject(item, outputFileName); |
|
||||||
} |
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