private static void ExportInner(Assembly assembly, string defaultSchema, string defaultIdentityColumn) { string buildOutputFile(string suffix) { return(Path.Combine(Path.GetDirectoryName(assembly.Location), Path.GetFileNameWithoutExtension(assembly.Location) + suffix)); } try { var dataModel = new AssemblyModelBuilder().GetDataModel(assembly, defaultSchema, defaultIdentityColumn); dataModel.SaveJson(buildOutputFile(DataModelFileSuffix)); } catch (Exception exc) { try { string errorJson = JsonConvert.SerializeObject(new { message = exc.Message }); File.WriteAllText(buildOutputFile(DataModelErrorFileSuffix), errorJson); } catch (Exception excInner) { Debug.Print($"Export data model exception: {exc.Message}"); Debug.Print($"Couldn't write error log: {excInner.Message}"); } } }
public void UserProfileModel() { var model = new AssemblyModelBuilder().GetDataModel(new Type[] { typeof(UserProfile) }, "dbo", "Id"); Assert.IsTrue(model.Tables.Count() == 1); Assert.IsTrue(model.TableDictionary["dbo.AspNetUsers"].Indexes.Count() == 2); Assert.IsTrue(model.TableDictionary["dbo.AspNetUsers"].Indexes.Any(ndx => { return(ndx.Name.Equals("U_AspNetUsers_UserId") && ndx.Type == IndexType.UniqueConstraint && ndx.Columns.SequenceEqual(new ModelSync.Models.Index.Column[] { new ModelSync.Models.Index.Column() { Name = "UserId" } })); })); Assert.IsTrue(model.TableDictionary["dbo.AspNetUsers"].Indexes.Any(ndx => { return(ndx.Name.Equals("PK_AspNetUsers") && ndx.Type == IndexType.PrimaryKey && ndx.Columns.SequenceEqual(new ModelSync.Models.Index.Column[] { new ModelSync.Models.Index.Column() { Name = "Id" } })); })); }
public void LoadGinsengModels() { // note: AssemblyHelper is not in the source of this repo -- this test is internal only //Assembly.Load("System.ComponentModel.Annotations, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += AssemblyHelper.LoadReflectionOnlyDependencies; var assembly = Assembly.ReflectionOnlyLoadFrom(@"C:\Users\Adam\Source\Repos\Ginseng8\Ginseng8.Models\bin\Debug\netstandard2.0\Ginseng.Models.dll"); var dataModel = new AssemblyModelBuilder().GetDataModel(assembly); }
public void CreateDataModelFromTypes() { var model = AssemblyModelBuilder.GetDataModelFromTypes(new Type[] { typeof(Employee), typeof(ActionItem) }, "dbo", "Id"); }
public void SampleModelCompare() { using (var cn = LocalDb.GetConnection("Hs5")) { var asm = Assembly.LoadFile(@"C:\Users\Adam\Source\Repos\ModelSync.WinForms\SampleModel\bin\Debug\netstandard2.0\SampleModel.dll"); var srcModel = new AssemblyModelBuilder().GetDataModel(asm); var destModel = new SqlServerModelBuilder().GetDataModelAsync(cn).Result; var diff = DataModel.Compare(srcModel, destModel); } }
public static async Task CreateTablesAsync(IEnumerable <Type> modelTypes, IDbConnection connection, SqlDialect dialect = null, string defaultSchema = "dbo", string defaultIdentityColumn = "Id") { var dataModel = AssemblyModelBuilder.GetDataModelFromTypes(modelTypes, defaultSchema, defaultIdentityColumn); if (dialect == null) { dialect = new SqlServerDialect(); } var script = await dataModel.ScriptCreateTablesAsync(connection, dialect); await dialect.ExecuteAsync(connection, script); }
public static void Execute(string[] args) { try { var options = new ExportModelArgs(args); var assembly = Assembly.LoadFrom(options.Assembly); var dataModel = new AssemblyModelBuilder().GetDataModel(assembly, options.DefaultSchema, options.DefaultIdentityColumn); dataModel.SaveJson(options.OutputFile); } catch (Exception exc) { Console.WriteLine($"ModelExporter error: {exc.Message}"); } }
public void InferFKWithoutReferencesAttr() { var model = AssemblyModelBuilder.GetDataModelFromTypes(new Type[] { typeof(Employee), typeof(ActionItem2) }, "dbo", "Id"); Assert.IsTrue(model.ForeignKeys.Contains(new ForeignKey() { Parent = new Table() { Name = "dbo.ActionItem2" }, Name = "FK_ActionItem2_EmployeeId" })); }
public void WriteJson() { var model = AssemblyModelBuilder.GetDataModelFromTypes(new Type[] { typeof(Employee), typeof(ActionItem2) }, "dbo", "Id"); Assert.IsTrue(model.ForeignKeys.Count() == 1); string fileName = GetFilename("sampleModel.json"); model.SaveJson(fileName); var load = DataModel.FromJsonFile(fileName); Assert.IsTrue(load.ForeignKeys.Count() == 1); }
private async Task <DataModel> GetAssemblyModelAsync(string text) { try { // help from https://docs.microsoft.com/en-us/dotnet/framework/deployment/best-practices-for-assembly-loading OperationStarted?.Invoke("Analyzing assembly...", new EventArgs()); var assembly = Assembly.LoadFrom(text); var result = new AssemblyModelBuilder().GetDataModel(assembly); return(await Task.FromResult(result)); } catch (Exception exc) { throw new Exception($"Error analyzing assembly: {exc.Message}"); } finally { OperationComplete?.Invoke(this, new EventArgs()); } }
public void VerifyTableNaming() { var dataModel = AssemblyModelBuilder.GetDataModelFromTypes(new Type[] { typeof(Employee), typeof(LogTable), typeof(UserProfile) }, "dbo", "Id"); Assert.IsTrue(dataModel.Tables.Contains(new Table() { Name = "dbo.Employee" })); Assert.IsTrue(dataModel.Tables.Contains(new Table() { Name = "log.LogTable" })); Assert.IsTrue(dataModel.Tables.Contains(new Table() { Name = "dbo.AspNetUsers" })); }
public void ImportTypes(Assembly assembly, string defaultSchema = "dbo", string defaultIdentityColumn = "Id") { var model = new AssemblyModelBuilder().GetDataModel(assembly, defaultSchema, defaultIdentityColumn); ImportModel(model); }
public void ImportTypes(IEnumerable <Type> types, string defaultSchema = "dbo", string defaultIdentityColumn = "Id") { var model = new AssemblyModelBuilder().GetDataModel(types, defaultSchema, defaultIdentityColumn); ImportModel(model); }
public void LoadSampleModel() { var asm = Assembly.LoadFile(@"C:\Users\Adam\Source\Repos\ModelSync.WinForms\SampleModel\bin\Debug\netstandard2.0\SampleModel.dll"); var model = new AssemblyModelBuilder().GetDataModel(asm); }
public void CreateTableFromClass() { var table = AssemblyModelBuilder.GetTableFromType <Employee>("dbo", "Id"); var sql = table.CreateStatement(); var output = new SqlServerDialect().FormatStatement(sql); }