Why the database data is not being updated but object did and without error?

The core of the problem here is that, two instances of AppDbContext are being created to conduct one single action. Changes are made in one instance and SaveChanges is being called on other instance. Obviously, it is not being reflected in underlying database.

We will now go through your code step by step from bottom to top.

In ATM.ConsoleUICore.Program.Main() method, note the following code:

AccountService accountService = new AccountService();
...
...
...
accountService.DepositAmount(bankAccount, 50);

You are creating an instance of AccountService. In constructor of AccountService, you are creating an instance of UnitOfWork as below:

private readonly UnitOfWork uow;
public AccountService()
{            
    uow = new UnitOfWork();
}

In constructor of UnitOfWork, you are creating an instance of AppDbContext (which is derived from DbContext).
You also have BankAccounts property there which is an instance of RepositoryBankAccount as below:

private readonly AppDbContext db;
public UnitOfWork()
{
    db = new AppDbContext();
}
...
...
...
private RepositoryBankAccount _BankAccounts;
public RepositoryBankAccount BankAccounts
{
    get
    {
        if (_BankAccounts == null)
        {
            _BankAccounts = new RepositoryBankAccount();
        }
        return _BankAccounts;
    }
}

Now the problem...

In constructor of RepositoryBankAccount, you are again creating an instance of AppDbContext as below:

public AppDbContext context { get; }
public RepositoryBankAccount()
{
    context = new AppDbContext();
}

Actually, you are pretending that your actions under one UnitOfWork instance are being executed as one database transaction. But, as you are creating different instance of AppDbContext in repository, this is not the case. Your unit of work is detached from repository. You have to connect them. It should be same instance of AppDbContext everywhere.

So, what is the solution?

Do NOT create an instance of AppDbContext in any repository. Instead, inject the existing instance from unit of work.

public AppDbContext context { get; }

public RepositoryBankAccount(AppDbContext appDbContext)//<==Inject the AppDbContext
{
    context = appDbContext;//<==Do NOT create new instance here; assign the injected instance.
}

Then, in your UnitOfWork class, change the property BankAccounts as below:

private RepositoryBankAccount _BankAccounts;
public RepositoryBankAccount BankAccounts
{
    get
    {
        if (_BankAccounts == null)
        {
            _BankAccounts = new RepositoryBankAccount(db);//<==Note that `db` means `AppDbContext` is injected
        }
        return _BankAccounts;
    }
}

By the way, avoid all these unnecessary wrappers over wrappers.

Have a look at this answer that explains why such wrappers are not needed.

Just in case you decide to go on with your existing design, I have already suggested a solution above.

Additionally, I will suggest your one unit of work should be one database transaction. So, your database transaction starts when you create an instance of unit of work and ends (commit or rollback) when you dispose it. Either everything flushes to database or none. Everything that happens in between this should be part of one database transaction. In case of exception, rollback the unit of work all together.