I googled IEditableObject, read this article it appears what IEditableObject is supposed to do is added EndEdit and CancelEdit to an object... isn't this what the bindingSource does? how come it isn't working?

I have rolled my own buffering class, that's a little messy but works for sure saving one record at a time.

This is the parent class for my business objects that wrap around a linq entity.



Code:
 public class BufferedLinqChange
    {
        LqGpsDataContext _dataContext;

        internal BufferedLinqChange(LqGpsDataContext dataContext)
        {
            _dataContext = dataContext;
        }

        protected void SetBufferedProperty<T>(string key,Action linqAction
            ,bool linqEqualsValue,Action bufferAction)
        {
            if (linqEqualsValue)
            {
                if (Changes.ContainsKey(key))
                    Changes.Remove(key);
            }
            else
            Changes.InsertOrUpdate(key, linqAction); bufferAction();
        }

        protected Dictionary<String, Action> Changes = new Dictionary<string, Action>();

        public int ChangeCount { get { return Changes != null ? Changes.Count : 0; } }
        public bool hasChanges { get { return Changes != null ? Changes.Count > 0 : false; } }

        public void SubmitChanges()
        {
            _dataContext.SubmitChanges();
            if (ChangeCount > 0)
            {
                Changes.ForEach((item) => item.Value.Invoke());
                _dataContext.SubmitChanges();
            }
        }
        public void CancelChanges()
        {
            if (Changes != null)
                Changes.Clear();
        }
    }
Here's a sample of one of the properties:

Code:
   #region assetTag


        String _AssetTag;
        public const String STR_assetTag = "assetTag";
        public String assetTag
        {
            get { return (Changes.ContainsKey(STR_assetTag) ? _AssetTag : Asset.assetTag); }
            set
            {
                SetBufferedProperty<String>(STR_assetTag
                    , () => Asset.assetTag = value, Asset.assetTag == value, () => _AssetTag = value);
            }
        }
        #endregion
so far it is working well.