コード例 #1
0
        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}");
                }
            }
        }
コード例 #2
0
        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"
                    }
                }));
            }));
        }
コード例 #3
0
ファイル: Reflection.cs プロジェクト: adamfoneil/ModelSync
 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);
 }
コード例 #4
0
ファイル: SqlScripting.cs プロジェクト: aTiKhan/ModelSync
 public void CreateDataModelFromTypes()
 {
     var model = AssemblyModelBuilder.GetDataModelFromTypes(new Type[]
     {
         typeof(Employee),
         typeof(ActionItem)
     }, "dbo", "Id");
 }
コード例 #5
0
 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);
     }
 }
コード例 #6
0
ファイル: DataModel_Create.cs プロジェクト: aTiKhan/ModelSync
        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);
        }
コード例 #7
0
 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}");
     }
 }
コード例 #8
0
        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"
            }));
        }
コード例 #9
0
ファイル: JsonSupport.cs プロジェクト: adamfoneil/ModelSync
        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);
        }
コード例 #10
0
 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());
     }
 }
コード例 #11
0
        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"
            }));
        }
コード例 #12
0
ファイル: DataModel_Create.cs プロジェクト: aTiKhan/ModelSync
        public void ImportTypes(Assembly assembly, string defaultSchema = "dbo", string defaultIdentityColumn = "Id")
        {
            var model = new AssemblyModelBuilder().GetDataModel(assembly, defaultSchema, defaultIdentityColumn);

            ImportModel(model);
        }
コード例 #13
0
ファイル: DataModel_Create.cs プロジェクト: aTiKhan/ModelSync
        public void ImportTypes(IEnumerable <Type> types, string defaultSchema = "dbo", string defaultIdentityColumn = "Id")
        {
            var model = new AssemblyModelBuilder().GetDataModel(types, defaultSchema, defaultIdentityColumn);

            ImportModel(model);
        }
コード例 #14
0
ファイル: Reflection.cs プロジェクト: adamfoneil/ModelSync
 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);
 }
コード例 #15
0
ファイル: SqlScripting.cs プロジェクト: aTiKhan/ModelSync
 public void CreateTableFromClass()
 {
     var table  = AssemblyModelBuilder.GetTableFromType <Employee>("dbo", "Id");
     var sql    = table.CreateStatement();
     var output = new SqlServerDialect().FormatStatement(sql);
 }