I have a table called Currency with two properties to be inserted which are Unit and Rate. 
When I press add or edit, only Unit is saved but Rate remain 0. 
When I press delete, the record is deleted successfully.
Below is the code from Data Layer
public interface ICurrencyRepository
{
    List<Currency> GetAll();
    Currency GetById(int id);
    Currency Insert(Currency obj);
    void Update(Currency obj);
    void Delete(Currency obj);
}
public class CurrencyRepository : ICurrencyRepository
{
    public void Delete(Currency obj)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            db.Currencies.Attach(obj);
            db.Currencies.Remove(obj);
            db.SaveChanges();
        }
    }
    public List<Currency> GetAll()
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            return db.Currencies.ToList();
        }
    }
    public Currency GetById(int id)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            return db.Currencies.Find(id);
        }
    }
    public Currency Insert(Currency obj)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            db.Currencies.Add(obj);
            db.SaveChanges();
            return obj;
        }
    }
    public void Update(Currency obj)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            db.Currencies.Attach(obj);
            db.Entry(obj).State = System.Data.Entity.EntityState.Modified;
            db.SaveChanges();
        }
    }
}
Below is the code from Business Layer
public static class CurrencyServices
{
    static ICurrencyRepository repository;
    static CurrencyServices()
    {
        repository = new CurrencyRepository();
    }
    public static List<Currency> GetAll()
    {
        return repository.GetAll();
    }
    public static Currency GetById(int id)
    {
        return repository.GetById(id);
    }
    public static Currency Insert(Currency obj)
    {
        return repository.Insert(obj);
    }
    public static void Update(Currency obj)
    {
        repository.Update(obj);
    }
    public static void Delete(Currency obj)
    {
        repository.Delete(obj);
    }
}
Below is the code from my UI (Page with grid)
    private void btnNew_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
    {
        DocumentController.ActivateForm(typeof(Test), null);
        currencyBindingSource.DataSource = CurrencyServices.GetAll();
    }
    private void btnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
    {
        if (currencyBindingSource.Current == null)
        {
            return;
        }
        else
        {
            DocumentController.ActivateForm(typeof(Test), currencyBindingSource.Current as Currency);
            currencyBindingSource.DataSource = CurrencyServices.GetAll();
        }
    }
Below is the code from my UI (Edit Page)
    bool isNew;
    public CurrencyEdit(Currency obj)
    {
        InitializeComponent();
        if (obj == null)
        {
            currencyBindingSource.DataSource = new Currency();
            isNew = true;
        }
        else
        {
            currencyBindingSource.DataSource = obj;
            isNew = false;
        }
    }
    private void btnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
    {
        if (isNew)
        {
            CurrencyServices.Insert(currencyBindingSource.Current as Currency);
        }
        else
        {
            CurrencyServices.Update(currencyBindingSource.Current as Currency);
        }
    }
Below is how I currencyBindingSource is getting created and bound in UI code.
- Add bindingSource from toolbox.
 - Go to properties -> DataSource -> Add Project Data Source -> Object -> Choose 
currencytable. - Add two textboxes -> Properties -> DataBindings -> EditValue -> Choose 
UnitandRatefromcurrencyBindingSource. 
                        
Here is what you need to do. I believe you are missing some appropriate casts which are required:
Note:
EfTestDataSetis the name of the data source data set which got created while adding binding source in my application. It might be different in your application.Hope this helps!