private IList <EdmSchemaError> GenerateCodeFor1_1Schema(string sourceEdmSchemaFilePath, LazyTextWriterCreator textWriter, IEnumerable <string> additionalEdmSchemaFilePaths) { EntityClassGenerator generator = new EntityClassGenerator(_languageOption); string target = textWriter.TargetFilePath; bool cleanUpTarget = false; try { if (textWriter.IsUserSuppliedTextWriter) { cleanUpTarget = true; target = Path.Combine(Path.GetTempPath(), Path.GetTempFileName()); } IList <EdmSchemaError> errors = generator.GenerateCode(sourceEdmSchemaFilePath, target, additionalEdmSchemaFilePaths != null ? additionalEdmSchemaFilePaths : Enumerable.Empty <string>()); if (textWriter.IsUserSuppliedTextWriter && !errors.Any(e => e.Severity == EdmSchemaErrorSeverity.Error)) { textWriter.GetOrCreateTextWriter().Write(File.ReadAllText(target)); } return(errors); } finally { if (cleanUpTarget && target != null && File.Exists(target)) { File.Delete(target); } } }
public ClientApiGenerator(Schema sourceSchema, EdmItemCollection edmItemCollection, EntityClassGenerator generator, List<EdmSchemaError> errors) { Debug.Assert(sourceSchema != null, "sourceSchema is null"); Debug.Assert(edmItemCollection != null, "edmItemCollection is null"); Debug.Assert(generator != null, "generator is null"); Debug.Assert(errors != null, "errors is null"); _edmItemCollection = edmItemCollection; _sourceSchema = sourceSchema; _generator = generator; _errors = errors; _attributeEmitter = new AttributeEmitter(_typeReference); }
private IList <EdmSchemaError> GetMinimumTargetFrameworkVersion(string sourceEdmSchemaFilePath, out Version targetFrameworkVersion) { targetFrameworkVersion = null; try { using (XmlReader reader = XmlReader.Create(sourceEdmSchemaFilePath)) { return(GetMinimumTargetFrameworkVersion(reader, out targetFrameworkVersion)); } } catch (System.IO.FileNotFoundException ex) { return(new List <EdmSchemaError>() { EntityClassGenerator.CreateErrorForException(ModelBuilderErrorCode.FileNotFound, ex) }); } }
public static bool CodeGen(String edmxFile, LanguageOption languageOption, out String codeOut, out List<Object> errors) { codeOut = String.Empty; XDocument xdoc = XDocument.Load(edmxFile); XElement c = GetCsdlFromEdmx(xdoc); Version v = _namespaceManager.GetVersionFromEDMXDocument(xdoc); StringWriter sw = new StringWriter(); errors = new List<Object>(); // // code-gen uses different classes for V1 and V2 of the EF // if (v == EntityFrameworkVersions.Version1) { // generate code EntityClassGenerator codeGen = new EntityClassGenerator(languageOption); errors = codeGen.GenerateCode(c.CreateReader(), sw) as List<Object>; } else if (v == EntityFrameworkVersions.Version2) { EntityCodeGenerator codeGen = new EntityCodeGenerator(languageOption); errors = codeGen.GenerateCode(c.CreateReader(), sw) as List<Object>; } else if (v == EntityFrameworkVersions.Version3) { EntityCodeGenerator codeGen = new EntityCodeGenerator(languageOption); errors = codeGen.GenerateCode(c.CreateReader(), sw) as List<Object>; } // output errors if (errors != null) return true; codeOut = sw.ToString(); return false; }
private IList <EdmSchemaError> InternalGenerateCode(string sourceEdmSchemaFilePath, Version schemaVersion, LazyTextWriterCreator textWriter, IEnumerable <string> additionalEdmSchemaFilePaths, Version targetFrameworkVersion) { List <EdmSchemaError> errors = new List <EdmSchemaError>(); try { if (targetFrameworkVersion == EntityFrameworkVersions.Version1) { errors.Add(new EdmSchemaError(Strings.EntityCodeGenTargetTooLow, (int)ModelBuilderErrorCode.TargetVersionNotSupported, EdmSchemaErrorSeverity.Error)); return(errors); } if (!MetadataItemCollectionFactory.ValidateActualVersionAgainstTarget(targetFrameworkVersion, schemaVersion, errors)) { return(errors); } if (schemaVersion == EntityFrameworkVersions.EdmVersion1_1) { return(GenerateCodeFor1_1Schema(sourceEdmSchemaFilePath, textWriter, additionalEdmSchemaFilePaths)); } ReflectionAdapter codeGenerator = ReflectionAdapter.Create(_languageOption, targetFrameworkVersion); codeGenerator.SourceCsdlPath = sourceEdmSchemaFilePath; codeGenerator.ReferenceCsdlPaths = additionalEdmSchemaFilePaths; codeGenerator.EdmToObjectNamespaceMap = _edmToObjectNamespaceMap.AsDictionary(); string code = codeGenerator.TransformText(); if (codeGenerator.Errors.Count != 0) { ModelBuilderErrorCode errorCode = ModelBuilderErrorCode.PreprocessTemplateTransformationError; errors.AddRange(codeGenerator.Errors.OfType <CompilerError>().Select(c => ConvertToEdmSchemaError(c, errorCode))); if (codeGenerator.Errors.HasErrors) { return(errors); } } using (TextWriter writer = textWriter.GetOrCreateTextWriter()) { writer.Write(code); } } catch (System.UnauthorizedAccessException ex) { errors.Add(EntityClassGenerator.CreateErrorForException(ModelBuilderErrorCode.SecurityError, ex)); } catch (System.IO.FileNotFoundException ex) { errors.Add(EntityClassGenerator.CreateErrorForException(ModelBuilderErrorCode.FileNotFound, ex)); } catch (System.Security.SecurityException ex) { errors.Add(EntityClassGenerator.CreateErrorForException(ModelBuilderErrorCode.SecurityError, ex)); } catch (System.IO.DirectoryNotFoundException ex) { errors.Add(EntityClassGenerator.CreateErrorForException(ModelBuilderErrorCode.DirectoryNotFound, ex)); } catch (System.IO.IOException ex) { errors.Add(EntityClassGenerator.CreateErrorForException(ModelBuilderErrorCode.IOException, ex)); } catch (Exception e) { if (MetadataUtil.IsCatchableExceptionType(e)) { errors.Add(EntityClassGenerator.CreateErrorForException(ModelBuilderErrorCode.PreprocessTemplateTransformationError, e, sourceEdmSchemaFilePath)); } else { throw; } } return(errors); }
/// <summary> /// This API supports the Entity Framework infrastructure and is not intended to be used directly from your code. /// </summary> /// <param name="languageOption">This API supports the Entity Framework infrastructure and is not intended to be used directly from your code.</param> public EntityClassGenerator(LanguageOption languageOption) { _entityClassGenerator = new Sded.EntityClassGenerator((Sded.LanguageOption)languageOption); }
private IList<EdmSchemaError> GenerateCodeFor1_1Schema(string sourceEdmSchemaFilePath, LazyTextWriterCreator textWriter, IEnumerable<string> additionalEdmSchemaFilePaths) { EntityClassGenerator generator = new EntityClassGenerator(_languageOption); string target = textWriter.TargetFilePath; bool cleanUpTarget = false; try { if (textWriter.IsUserSuppliedTextWriter) { cleanUpTarget = true; target = Path.Combine(Path.GetTempPath(), Path.GetTempFileName()); } IList<EdmSchemaError> errors = generator.GenerateCode(sourceEdmSchemaFilePath, target, additionalEdmSchemaFilePaths != null ? additionalEdmSchemaFilePaths : Enumerable.Empty<string>()); if (textWriter.IsUserSuppliedTextWriter && !errors.Any(e => e.Severity == EdmSchemaErrorSeverity.Error)) { textWriter.GetOrCreateTextWriter().Write(File.ReadAllText(target)); } return errors; } finally { if (cleanUpTarget && target != null && File.Exists(target)) { File.Delete(target); } } }
private static void CodeGen(FileInfo edmxFile, LanguageOption languageOption) { XDocument xdoc = XDocument.Load(edmxFile.FullName); Version v = _namespaceManager.GetVersionFromEDMXDocument(xdoc); XElement c = GetCsdlFromEdmx(xdoc); StringWriter sw = new StringWriter(); IList<EdmSchemaError> errors = null; // // code-gen uses different classes for V1 and V2 of the EF // if (v == EntityFrameworkVersions.Version1) { // generate code EntityClassGenerator codeGen = new EntityClassGenerator(languageOption); errors = codeGen.GenerateCode(c.CreateReader(), sw); } else if (v == EntityFrameworkVersions.Version2) { EntityCodeGenerator codeGen = new EntityCodeGenerator(languageOption); errors = codeGen.GenerateCode(c.CreateReader(), sw); } // write out code-file string outputFileName = GetFileNameWithNewExtension(edmxFile, GetFileExtensionForLanguageOption(languageOption)); File.WriteAllText(outputFileName, sw.ToString()); // output errors WriteErrors(errors); }
private static void CodeGen(FileInfo edmxFile, LanguageOption languageOption) { XElement c = GetCsdlFromEdmx(XDocument.Load(edmxFile.FullName)); // generate code StringWriter sw = new StringWriter(); EntityClassGenerator codeGen = new EntityClassGenerator(languageOption); IList<EdmSchemaError> errors = codeGen.GenerateCode(c.CreateReader(), sw); // write out code-file string outputFileName = GetFileNameWithNewExtension(edmxFile, GetFileExtensionForLanguageOption(languageOption)); File.WriteAllText(outputFileName, sw.ToString()); // output errors WriteErrors(errors); }