public void CompareSelfTestEfCoreContext()
        {
            //SETUP
            using (var context = new BookContext(_options))
            {
                var dtService       = context.GetDesignTimeService();
                var serviceProvider = dtService.GetDesignTimeProvider();
                var factory         = serviceProvider.GetService <IDatabaseModelFactory>();
#if NETCOREAPP2_1
                var database = factory.Create(_connectionString, new string[] { }, new string[] { });
#elif NETCOREAPP3_0
                var database = factory.Create(_connectionString,
                                              new DatabaseModelFactoryOptions(new string[] { }, new string[] { }));
#endif
                var handler = new Stage1Comparer(context.Model, nameof(BookContext));

                //ATTEMPT
                var hasErrors = handler.CompareModelToDatabase(database);

                //VERIFY
                hasErrors.ShouldBeFalse();
                foreach (var log in CompareLog.AllResultsIndented(handler.Logs))
                {
                    _output.WriteLine(log);
                }
            }
        }
        public void GetDesignTimeServiceProviderSqlServer()
        {
            //SETUP
            using (var context = new BookContext(_options))
            {
                //ATTEMPT
                var service = context.GetDesignTimeService();

                //VERIFY
                service.ShouldNotBeNull();
                service.ShouldBeType <SqlServerDesignTimeServices>();
            }
        }
        public void GetDesignTimeServiceProviderSqlite()
        {
            //SETUP
            var options = SqliteInMemory
                          .CreateOptions <BookContext>();

            using (var context = new BookContext(options))
            {
                //ATTEMPT
                var service = context.GetDesignTimeService();

                //VERIFY
                service.ShouldNotBeNull();
                service.ShouldBeType <SqliteDesignTimeServices>();
            }
        }
        public void GetIDatabaseModelFactorySqlServer()
        {
            //SETUP
            using (var context = new BookContext(_options))
            {
                var dtService       = context.GetDesignTimeService();
                var serviceProvider = dtService.GetDesignTimeProvider();

                //ATTEMPT
                var factory = serviceProvider.GetService <IDatabaseModelFactory>();

                //VERIFY
                factory.ShouldNotBeNull();
                factory.ShouldBeType <SqlServerDatabaseModelFactory>();
            }
        }
        public void GetIDatabaseModelFactorySqlite()
        {
            //SETUP
            var options = SqliteInMemory
                          .CreateOptions <BookContext>();

            using (var context = new BookContext(options))
            {
                var dtService       = context.GetDesignTimeService();
                var serviceProvider = dtService.GetDesignTimeProvider();

                //ATTEMPT
                var factory = serviceProvider.GetService <IDatabaseModelFactory>();

                //VERIFY
                factory.ShouldNotBeNull();
                factory.ShouldBeType <SqliteDatabaseModelFactory>();
            }
        }
        public void GetIDatabaseModelFactoryDatabaseModel()
        {
            //SETUP
            using (var context = new BookContext(_options))
            {
                var dtService       = context.GetDesignTimeService();
                var serviceProvider = dtService.GetDesignTimeProvider();
                var factory         = serviceProvider.GetService <IDatabaseModelFactory>();

                //ATTEMPT

                var databaseModel = factory.Create(context.Database.GetConnectionString(),
                                                   new DatabaseModelFactoryOptions(new string[] { }, new string[] { }));

                //VERIFY
                foreach (var databaseModelTable in databaseModel.Tables)
                {
                    _output.WriteLine(databaseModelTable.Name);
                }
            }
        }