Exemplo n.º 1
0
        /// <summary>
        /// Mains.
        /// </summary>
        /// <param name="args">The arguments.</param>
        static void Main(string[] args)
        {
            CommandBuilderFactory.Assign(mapper => new SqliteCommandBuilder(mapper));

            string cs = "URI=file:test.db";
            var connection = new SQLiteConnection(cs);
            connection.Open();

            if (!connection.TableExists("Users"))
            {
                using (var uow = new AdoNetUnitOfWork(connection))
                {
                    uow.Execute(
                        "CREATE TABLE Users (Id INTEGER PRIMARY KEY AUTOINCREMENT, FirstName TEXT, LastName text, CreatedAtUtc INTEGER)");
                    uow.SaveChanges();
                }
            }

            var users = connection.ToList<User>("firstName = @FirstName", new {FirstName = "Gau%"});

            try
            {
                var first = connection.First<User>(new {Id = 1});
            }
            catch (EntityNotFoundException x)
            {
                Console.WriteLine("Expected to find user, since First was used instead of FirstOrDefault. User friendly error message: " + x.Message);
            }


            // clear old data
            using (var uow = new AdoNetUnitOfWork(connection))
            {
                using (var cmd = uow.CreateCommand())
                {
                    cmd.CommandText = "SELECT * FROM Users";
                    cmd.AddParameter("id", "983498043903");
                    foreach (var entity in cmd.ToEnumerable<User>())
                    {
                        Console.WriteLine(entity.FirstName);
                    }


                }

                uow.Truncate<User>();
                for (int i = 0; i < 100; i++)
                {
                    uow.Insert(new User { FirstName = "Arne" + i });
                }

                uow.SaveChanges();
            }


            Console.WriteLine("Press ENTER to quit.");
            Console.ReadLine();

        }
        public void rollback_transaction_if_savechanges_have_not_been_made()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();
            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);
            sut.Dispose();

            connection.Transactions[0].IsRolledBack.Should().BeTrue();
        }
        public void close_connection_if_owned_is_set()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();
            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection, true);
            sut.Dispose();

            connection.State.Should().Be(ConnectionState.Closed);
        }
        public void dont_close_connection_per_default()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();
            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);
            sut.Dispose();

            connection.State.Should().Be(ConnectionState.Open);
        }
        public void commit_successfully_if_no_commit_have_been_previously_made()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();
            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);
            sut.SaveChanges();

            connection.Transactions[0].IsCommitted.Should().BeTrue();
        }
        public void throw_if_commit_have_been_previously_made()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();
            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);
            sut.SaveChanges();
            Action actual = sut.SaveChanges;

            actual.ShouldThrow<TransactionAlreadyClosedException>();
        }
        public void close_connection_on_dispose_even_if_savechanges_have_been_called()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();
            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection, true);
            sut.SaveChanges();
            sut.Dispose();


            connection.Transactions[0].IsCommitted.Should().BeTrue();
            connection.State.Should().Be(ConnectionState.Closed);
        }
        public void use_the_specified_isolation_level()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();
            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection, true, IsolationLevel.Chaos);


            connection.Transactions[0].IsolationLevel.Should().Be(IsolationLevel.Chaos);
            connection.State.Should().Be(ConnectionState.Open);
        }
        public void attach_transaction_to_created_command()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();
            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);
            var actual = sut.CreateCommand();

            actual.Transaction.Should().BeSameAs(connection.Transactions[0]);
            actual.Connection.Should().BeSameAs(connection);
        }