public ActionResult <ExportResult> Export(ExportLayout layout) { ExportImportService <T> tempService = new ExportImportService <T>(_context); var export = tempService.GetExportResult(layout); return(Ok(export)); }
public void GetExportZip(ExportLayout exportLayout, string outputfile) { List <SimpleExportResult> exportResults = GetExportResult(exportLayout); foreach (SimpleExportResult simpleExportResult in exportResults) { File.WriteAllText(Path.Combine(outputfile, simpleExportResult.EntityName + ".json"), JsonConvert.SerializeObject(simpleExportResult, Formatting.None, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore })); } /* * using (FileStream stream = new FileStream(outputfile, FileMode.Create)) * { * ZipArchive archiv = new ZipArchive(stream, ZipArchiveMode.Create); * foreach (SimpleExportResult result in exportResults) * { * ZipArchiveEntry entry = archiv.CreateEntry(result.EntityName + ".json"); * using (Stream entryStream = entry.Open()) * { * var sw = new StreamWriter(entryStream, System.Text.Encoding.UTF8); * sw.Write(JsonConvert.SerializeObject(result)); * sw.Flush(); * entryStream.Close(); * } * } * }*/ }
public void GetLevel3Test() { InitData("GetLevel3Test"); var exportLayout = new ExportLayout() { EntityPrimaryKey = "Id", EntityPrimaryValue = "542c31f0-35e3-4a7d-a939-803f18f94669", Includes = (new List <ExportInclude>() { new ExportInclude() { Include = "SecondTableRows", SubIncludes = (new List <ExportInclude>() { new ExportInclude() { Include = "ThirdTableRows" } }).ToArray() } }).ToArray() }; var exportResult = _exportService.GetExportResult(exportLayout); Assert.True(exportResult.EntityData != null); Assert.True(exportResult.AdditionalData.Length == 0); Assert.True(((Table1)exportResult.EntityData).Id == Guid.Parse("542c31f0-35e3-4a7d-a939-803f18f94669")); Assert.True(((Table1)exportResult.EntityData).SecondTableRows.Count == 1); Assert.True(((Table1)exportResult.EntityData).SecondTableRows.First().ThirdTableRows.Count == 1); }
public ActionResult <ExportModel> ExportFile(ExportLayout layout) { // Save exportlayout for local export ExportModel toSaveExport = new ExportModel(); toSaveExport.ExportLayout = JsonConvert.SerializeObject(layout); _context.Exports.Add(toSaveExport); _context.SaveChanges(); return(Ok(toSaveExport)); }
public void GetLevel1Test() { InitData("GetLevel1Test"); var exportLayout = new ExportLayout() { UseModelAttributes = false, EntityPrimaryKey = "Id", EntityPrimaryValue = "542c31f0-35e3-4a7d-a939-803f18f94669", AdditionalData = new ExportLayout[] { } }; var exportResult = _exportService.GetExportResult(exportLayout); Assert.True(exportResult.EntityData != null); Assert.True(exportResult.AdditionalData.Length == 0); Assert.True(((Table1)exportResult.EntityData).Id == Guid.Parse("542c31f0-35e3-4a7d-a939-803f18f94669")); Assert.True(((Table1)exportResult.EntityData).SecondTableRows == null); }
public void GetLevelAdditionalDataTest() { InitData("GetLevelAdditionalDataTest"); var exportLayout = new ExportLayout() { EntityPrimaryKey = "Id", EntityPrimaryValue = "542c31f0-35e3-4a7d-a939-803f18f94669", Includes = (new List <ExportInclude>() { new ExportInclude() { Include = "SecondTableRows", SubIncludes = (new List <ExportInclude>() { new ExportInclude() { Include = "ThirdTableRows" } }).ToArray() } }).ToArray(), AdditionalData = new ExportLayout[] { new ExportLayout() { EntityName = "AdditionalData", EntityPrimaryValue = "cca5e277-77e7-4d70-9eb1-067156222da3" } } }; var exportResult = _exportService.GetExportResult(exportLayout); Assert.True(exportResult.EntityData != null); Assert.True(((Table1)exportResult.EntityData).Id == Guid.Parse("542c31f0-35e3-4a7d-a939-803f18f94669")); Assert.True(((Table1)exportResult.EntityData).SecondTableRows.Count == 1); Assert.True(((Table1)exportResult.EntityData).SecondTableRows.First().ThirdTableRows.Count == 1); Assert.True(exportResult.AdditionalData.Length > 0); Assert.True(((AdditionalData)((ExportResult)exportResult.AdditionalData.First()).EntityData).Name == "TestAdditional"); }
/// <summary> /// Collects data from database and returns it /// </summary> /// <param name="exportLayout"></param> /// <returns></returns> public List <SimpleExportResult> GetExportResult(ExportLayout exportLayout, bool loadAdditionalData = true) { var properties = _context.GetType().GetProperties(); Dictionary <string, SimpleExportResult> exports = new Dictionary <string, SimpleExportResult>(); PropertyInfo setType = properties.Where(p => p.PropertyType.IsGenericType && p.PropertyType.GetGenericArguments()[0] == typeof(T)).FirstOrDefault(); if (setType != null) { Type[] typeArgs = { typeof(T) }; Type genericType = typeof(DbSet <>); IQueryable <T> queryable = GetSet(_context).AsNoTracking <T>(); if (exportLayout.EntityPrimaryValue != null) { if (exportLayout.EntityPrimaryKeyType == null || exportLayout.EntityPrimaryKeyType == "") { // Get the key property foreach (PropertyInfo propertyInfo in typeof(T).GetProperties()) { if (Attribute.IsDefined(propertyInfo, typeof(KeyAttribute))) { exportLayout.EntityPrimaryKey = propertyInfo.Name; exportLayout.EntityPrimaryKeyType = propertyInfo.PropertyType.Name.ToUpper(); break; } } } if (exportLayout.EntityPrimaryKey != null && (exportLayout.EntityPrimaryKeyType == null || exportLayout.EntityPrimaryKeyType == "")) { PropertyInfo propertyInfo = typeof(T).GetProperty(exportLayout.EntityPrimaryKey); exportLayout.EntityPrimaryKeyType = propertyInfo.PropertyType.Name.ToUpper(); } string equalString = ""; if (exportLayout.EntityPrimaryKeyType != null && exportLayout.EntityPrimaryValue != "") { switch (exportLayout.EntityPrimaryKeyType.ToUpper()) { case "GUID": equalString = string.Format(".Equals(Guid.Parse(\"{0}\"))", exportLayout.EntityPrimaryValue); break; case "STRING": equalString = string.Format("== \"{0}\"", exportLayout.EntityPrimaryValue); break; case "INT": equalString = string.Format("== {0}", exportLayout.EntityPrimaryValue); break; } Expression <Func <T, bool> > expression = DynamicExpressionParser.ParseLambda <T, bool>(null, false, exportLayout.EntityPrimaryKey + equalString); queryable = queryable.Where(expression); } } // Get Includes from Attributes if (exportLayout.Includes == null && exportLayout.UseModelAttributes) { exportLayout.Includes = GetIncludesFromAttribute(typeof(T)); } if (exportLayout.Includes != null) { foreach (ExportInclude include in exportLayout.Includes) { queryable = SetIncludes(queryable, include); } } if (exportLayout.AdditionalData == null && loadAdditionalData && exportLayout.UseModelAttributes) { List <ExportLayout> additionalDataTables = new List <ExportLayout>(); foreach (PropertyInfo additionalData in properties.Where(p => p.PropertyType.IsGenericType && Attribute.IsDefined(p.PropertyType.GetGenericArguments()[0], typeof(AdditionalDataAttribute))).ToList()) { additionalDataTables.Add(new ExportLayout() { EntityName = additionalData.PropertyType.GetGenericArguments()[0].Name }); } if (additionalDataTables.Count > 0) { exportLayout.AdditionalData = additionalDataTables.ToArray(); } } List <ExportResult> additionalDatas = new List <ExportResult>(); if (exportLayout.AdditionalData != null && loadAdditionalData) { Type additionalType = typeof(ExportImportService <>); foreach (ExportLayout subLayout in exportLayout.AdditionalData) { PropertyInfo setAdditionalType = properties.Where(p => p.PropertyType.IsGenericType && p.PropertyType.GetGenericArguments()[0].Name == subLayout.EntityName).FirstOrDefault(); var addionalInstance = additionalType.MakeGenericType(setAdditionalType.PropertyType.GetGenericArguments()[0]); object subExportLayout = Activator.CreateInstance(addionalInstance, new object[] { _context }); List <SimpleExportResult> tempExportResults = ((IExportImportService)subExportLayout).GetExportResult(subLayout, false); foreach (SimpleExportResult temp in tempExportResults) { exports.Add(temp.EntityName, temp); } } } T entity = queryable.FirstOrDefault(); // We get all Properties witch are relation classes if (entity != null) { exports = Helpers.GetExportResult <T>(entity, exports); } } return(exports.Values.ToList()); }
static void Main(string[] args) { /*args = new string[] { * "--applychanges", * "--ModelName", * "Table1", * "--WorkingFile", * @"C:\Users\Coni\Downloads\output.json", * "--SecondFile", @"C:\Users\Coni\Downloads\second.json", * "--StatementsOutput", @"C:\Users\Coni\Downloads\output.json" * };*/ Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { DbContextOptionsBuilder dbContextOptionBuilder = new DbContextOptionsBuilder(); dbContextOptionBuilder.EnableSensitiveDataLogging(true); dbContextOptionBuilder.UseLoggerFactory(loggerFactory); dbContextOptionBuilder.UseSqlServer("Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=DatabaseCaseExtractorDb;Integrated Security=SSPI;"); DatabaseContext context = new DatabaseContext(dbContextOptionBuilder.Options); if (o.ModelName == "") { new Exception("We need a model-name for an export"); } if (o.ExportProcess) { if (o.WorkingFile == "") { new Exception("We need a working-file for an export"); } ExportLayout exportLayout = new ExportLayout(); exportLayout.EntityName = o.ModelName; if (o.PrimaryKeyValue != "") { exportLayout.EntityPrimaryValue = o.PrimaryKeyValue; } ExportResult exportResult = ((IExportImportService)GetExportImportService(context, exportLayout.EntityName)) .GetExportResult(exportLayout); File.WriteAllText(o.WorkingFile, JsonConvert.SerializeObject( exportResult, Formatting.Indented, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore } ) ); } else if (o.ImportProcess) { if (o.WorkingFile == "") { new Exception("We need a working-file for an import"); } ExportResult exportResult = JsonConvert.DeserializeObject <ExportResult>(File.ReadAllText(o.WorkingFile)); ((IExportImportService)GetExportImportService(context, o.ModelName)) .SetImportResult(exportResult); } else if (o.StatementProcess) { if (o.WorkingFile == "") { new Exception("We need a working-file for a statetment"); } if (o.SecondFile == "") { new Exception("We need a second-file for an statetment"); } List <LogEntry> entries = ((IExportImportService)GetExportImportService(context, o.ModelName)) .ExportSQLScripts( JsonConvert.DeserializeObject <ExportResult>(File.ReadAllText(o.WorkingFile)), JsonConvert.DeserializeObject <ExportResult>(File.ReadAllText(o.SecondFile)) ); File.WriteAllText(o.StatementsOutput, JsonConvert.SerializeObject(entries)); } else if (o.ApplyChanges) { List <LogEntry> entries = JsonConvert.DeserializeObject <List <LogEntry> >(File.ReadAllText(o.WorkingFile)); foreach (LogEntry entry in entries) { context.Database.ExecuteSqlCommand(entry.Command, entry.Parameters.Values.ToArray().Reverse()); } } }); }