Пример #1
0
        public object Store(Bean bean)
        {
            EnsureDispensed(bean);

            var isNew = _storage.IsNew(bean);

            ImplicitTransaction(() =>
            {
                bean.BeforeStore();

                if (isNew)
                {
                    bean.BeforeInsert();
                }
                else
                {
                    bean.BeforeUpdate();
                }

                foreach (var observer in _observers)
                {
                    observer.BeforeStore(bean);

                    if (isNew)
                    {
                        observer.BeforeInsert(bean);
                    }
                    else
                    {
                        observer.BeforeUpdate(bean);
                    }
                }

                var key = _storage.Store(bean.GetKind(), bean.Export(), DirtyTracking ? bean.GetDirtyNames() : null);

                if (key is CompoundKey)
                {
                    // !!! compound keys must not change during insert/update
                }
                else
                {
                    bean.SetKey(_keyAccess, key);
                }

                if (isNew)
                {
                    bean.AfterInsert();
                }
                else
                {
                    bean.AfterUpdate();
                }

                bean.AfterStore();

                foreach (var observer in _observers)
                {
                    if (isNew)
                    {
                        observer.AfterInsert(bean);
                    }
                    else
                    {
                        observer.AfterUpdate(bean);
                    }

                    observer.AfterStore(bean);
                }

                return(true);
            });

            bean.ForgetDirtyBackup();

            return(bean.GetKey(_keyAccess));
        }