public virtual ObjectAccessItem Update(IUnitOfWork unitOfWork, ObjectAccessItem obj)
        {
            var repository = unitOfWork.GetRepository<ObjectAccessItem>();

            var objDest = repository.Find(obj.ID);

            this.OnBeforeSave(unitOfWork, obj, objDest);

            var saver = this.GetForSave(unitOfWork, unitOfWork.GetObjectSaver(obj, objDest));

            repository.Update(saver.Dest);

            unitOfWork.SaveChanges();

            var eventHandler = Volatile.Read(ref this.OnUpdate);

            if (eventHandler != null)
            {
                eventHandler(this, new BaseObjectEventArgs()
                {
                    Type = TypeEvent.OnUpdate,
                    Object = saver.Dest,
                    UnitOfWork = unitOfWork
                });
            }

            return saver.Dest;
        }
        public virtual ObjectAccessItem Create(IUnitOfWork unitOfWork, ObjectAccessItem obj)
        {

            this.InitSortOrder(unitOfWork, obj);

            this.OnBeforeSave(unitOfWork, obj, null);

            var saver = this.GetForSave(unitOfWork, unitOfWork.GetObjectSaver(obj, null));

            unitOfWork.GetRepository<ObjectAccessItem>().Create(saver.Dest);

            unitOfWork.SaveChanges();

            var eventHandler = Volatile.Read(ref this.OnCreate);

            if (eventHandler != null)
            {
                eventHandler(this, new BaseObjectEventArgs()
                {
                    Type = TypeEvent.OnCreate,
                    Object = saver.Dest,
                    UnitOfWork = unitOfWork
                });
            }

            return saver.Dest;
        }