static void Main(string[] args)
        {
            Database.InitDatabase();

            Database.VerifyObject <Imovel>();
            Database.VerifyObject <Visitante>();
            Database.VerifyObject <Entrada>();

            Imovel.Truncate();
            Visitante.Truncate();
            Entrada.Truncate();

            using (var _trans = new TransactionObject(false))
            {
                for (int i = 0; i < 20; i++)
                {
                    var _imovel = new Imovel {
                        EnderecoImovel = $"Rua {i}, nº10", Proprietario = $"Proprietário {i}"
                    };
                    _imovel.SaveChanges(transaction: _trans);
                }
                for (int i = 0; i < 20; i++)
                {
                    var _id        = i.ZeroEsquerda(2);
                    var _visitante = new Visitante {
                        Nome = $"Nome {_id}"
                    };
                    _visitante.SaveChanges(transaction: _trans);
                }

                var _action = new Action(() =>
                {
                    var _rnd = new Random(1);
                    for (int i = 0; i < 100; i++)
                    {
                        var _yes     = _rnd.Next(1, 2) == 1;
                        var _entrada = new Entrada
                        {
                            Autorizador     = "Teste",
                            DataHoraEntrada = DateTime.Now,
                            DataHoraSaida   = _yes ? DateTime.Now : default(DateTime),
                            IdImovel        = _rnd.Next(1, 20),
                            IdVisitante     = _rnd.Next(1, 20),
                            MotivoVisita    = MotivoVisita.Pessoal,
                            StatusEntrada   = _yes ? StatusEntrada.Finalizado : StatusEntrada.Entrada
                        };
                        try
                        {
                            _entrada.SaveChanges(transaction: _trans);
                        }
                        catch (Exception ex)
                        {
                            System.Console.WriteLine(ex.Message);
                        }
                        Thread.Sleep(10);
                    }
                });

                var _watch = new Stopwatch();
                _watch.Start();

                for (int _a = 0; _a < 10; _a++)
                {
                    _action.Invoke();
                    Thread.Sleep(500);
                }
                _watch.Stop();

                System.Console.WriteLine($"Tempo do insert sem transação: {_watch.Elapsed.ToString("g")}");
                _trans.Commit();
            }

            var _date1  = DateTime.Now.Date;
            var _date2  = _date1.AddHours(23).AddMinutes(59).AddSeconds(59);
            var _status = new[] { StatusEntrada.Entrada, StatusEntrada.Finalizado, };


            //var _teste_like_1 = Visitante.Load(v => v.Nome.Contains("04"));
            //var _teste_like_2 = Visitante.Load(v => v.Nome.StartsWith("04"));
            //var _teste_like_3 = Visitante.Load(v => v.Nome.EndsWith("04"));

            //var _entradas_1 = DoQuery<Entrada>(e => e.IdImovel == 1);
            //var _entradas_2 = DoQuery<Entrada>(e => e.IdVisitante == _teste_like_3.IdVisitante);
            var _entradas_3 = DoQuery <Entrada>(e => _status.Contains(e.StatusEntrada) && e.DataHoraEntrada >= _date1 && e.DataHoraEntrada <= _date2);

            System.Console.WriteLine("Pressione qualquer tecla para finalizar...");
            System.Console.Read();
        }