La base de datos no se actualiza con el método Attach

Estoy tratando de aprender LINQ to SQL. He implementado con éxito el método de inserción y los datos se están insertando en la base de datos. Cuando trato de actualizar los datos existentes, no se refleja en la base de datos aunque no haya ninguna excepción. ¿Podría por favor aclarar qué pudo haber salido mal?

Nota: AccountNumber es clave principal

EDITAR

Las siguientes líneas de código lo hacen funcionar. Pero, ¿puedes explicarpor qué necesitamos una actualización?

    accountRepository.UpdateChangesByAttach(acc1);
    accountRepository.RefreshEntity(acc1);
    accountRepository.SubmitChanges();

Nota:

DataContext.Refresh method refreshes object state by using data in the database.

La actualización se realizó con la opción KeepCurrentValues. Lo que entiendo es que conservará los valores que actualicé en el objeto de entidad. Estoy suministrando (solo) la información requerida que debe actualizarse en la base de datos. Es esta actualización requeridapara obtener los valores de columna restantes?

Cliente

using (var context = new   RepositoryLayer.LibraryManagementClassesDataContext(connectionstring)) 
   {
            context.Log = Console.Out;

            RepositoryLayer.Repository<RepositoryLayer.Account> selectedRepository = new RepositoryLayer.Repository<RepositoryLayer.Account>();
            //selectedRepository.Context = context;
            AccountBusiness accountBl = new AccountBusiness(selectedRepository);

            //Transaction 1
            //List<RepositoryLayer.Account> accountList = accountBl.GetAllAccounts();

            //Transaction 2
            //accountBl.InsertAccounts();

            //Transaction3
            accountBl.UpdateAccounts();


   }

Capa de negocios

    public void  InsertAccounts()
    {
        RepositoryLayer.Account acc1 = new RepositoryLayer.Account();
        acc1.AccountNumber = 4;
        acc1.AccountType = "Contract";
        acc1.Duration = 6;

        accountRepository.InsertOnSubmit(acc1);
        accountRepository.SubmitChanges();

    }

    public void UpdateAccounts()
    {
        RepositoryLayer.Account acc1 = new RepositoryLayer.Account();
        acc1.AccountNumber = 4;
        acc1.AccountType = "TEST";
        acc1.Duration = 10;

        accountRepository.UpdateChangesByAttach(acc1);
        accountRepository.SubmitChanges();

    }

Repositorio

public class Repository<T> : IRepository<T> where T : class
{
    public System.Data.Linq.DataContext Context
    {
        get;
        set;
    }

    public virtual System.Data.Linq.ITable GetTable()
    {
        return Context.GetTable<T>();
    }


    public virtual void InsertOnSubmit(T entity)
    {
        GetTable().InsertOnSubmit(entity);
    }

    public virtual void UpdateChangesByAttach(T entity)
    {
        GetTable().Attach(entity);
    }


    public virtual void SubmitChanges()
    {
        Context.SubmitChanges();
    }

    public virtual void RefreshEntity(T entity)
    {
        Context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, entity);
    }


}

LEYENDO

LINQ to SQL: Actualización sin actualización cuando "UpdateCheck = Nunca"

Linq To SQL Adjuntar / Actualizar objeto de entidad

¿Qué hace LINQ-to-SQL Table <T> .Attach?

¿Por qué debo usar GetOriginalEntityState () en mi método de guardado del repositorio LINQ To SQL?

¿Cómo puedo rechazar todos los cambios en un Linq al DataContext de SQL?

Respuestas a la pregunta(2)

Su respuesta a la pregunta