Esempio n. 1
0
        /// <summary>
        /// 该方法用于保存数据后,更新基表的信息
        /// </summary>
        /// <param name="root"></param>
        /// <param name="obj"></param>
        private void OnDataInsert(DomainObject root, DomainObject obj, DynamicData objData)
        {
            SetDataProxy(obj, objData);//对于保存的对象,我们依然要同步数据代理
            obj.MarkClean();

            if (this.Type == DataTableType.AggregateRoot)
            {
                var ar = (IAggregateRoot)obj;
                DomainBuffer.Add(this.ObjectTip.ObjectType, ar.GetIdentity(), ar);
            }

            if (this.IsDerived || this.IsDynamic)
            {
                //如果是派生对象或者动态对象,那么我们需要更新基表信息
                var inheritedRoot = this.InheritedRoot;
                using (var temp = SqlHelper.BorrowData())
                {
                    var data = temp.Item;
                    if (this.Type != DataTableType.AggregateRoot)
                    {
                        data.Add(this.Root.TableIdName, GetObjectId(root));
                    }

                    data.Add(EntityObject.IdPropertyName, GetObjectId(obj));

                    //修改类型码
                    var typeKey = this.IsDerived ? this.DerivedClass.TypeKey : this.DynamicType.Define.TypeName;
                    data.Add(GeneratedField.TypeKeyName, typeKey);

                    //更改基表的信息
                    var sql = inheritedRoot.GetUpdateSql(data);
                    SqlHelper.Execute(inheritedRoot.Name, sql, data);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 该方法用于修改数据后,更新基表的信息
        /// </summary>
        /// <param name="root"></param>
        /// <param name="obj"></param>
        private void OnDataUpdate(DomainObject root, DomainObject obj)
        {
            obj.MarkClean(); //修改之后,就干净了

            var id = GetObjectId(obj);

            //更新数据版本号
            var target = this.IsDerived ? this.InheritedRoot : this;

            using (var temp = SqlHelper.BorrowData())
            {
                var data = temp.Item;
                if (target.Type != DataTableType.AggregateRoot)
                {
                    data.Add(target.Root.TableIdName, GetObjectId(root));
                }

                data.Add(EntityObject.IdPropertyName, id);

                //更新版本号
                SqlHelper.Execute(target.Name, target.SqlUpdateVersion, data);

                //更新代理对象的版本号
                var dataVersion = target.Type == DataTableType.AggregateRoot
                                    ? this.GetDataVersion(id)
                                    : this.GetDataVersion(GetObjectId(root), id);

                obj.DataProxy.Version = dataVersion;
            }
        }
Esempio n. 3
0
        private void Supplement(DomainObject obj, DynamicData data, QueryLevel level)
        {
            var valueObject = obj as IValueObject;

            if (valueObject != null)
            {
                object id = null;
                if (data.TryGetValue(EntityObject.IdPropertyName, out id))
                {
                    valueObject.TrySetId((Guid)id);
                }
            }

            obj.MarkClean(); //对象从数据库中读取,是干净的
        }
Esempio n. 4
0
        /// <summary>
        /// 该方法用于修改数据后,更新基表的信息
        /// </summary>
        /// <param name="root"></param>
        /// <param name="obj"></param>
        private void OnDataUpdated(DomainObject root, DomainObject obj)
        {
            obj.MarkClean(); //修改之后,就干净了

            var id = GetObjectId(obj);

            //更新数据版本号
            var target = this.IsDerived ? this.InheritedRoot : this;

            using (var temp = SqlHelper.BorrowData())
            {
                var data = temp.Item;
                if (target.Type != DataTableType.AggregateRoot)
                {
                    data.Add(GeneratedField.RootIdName, GetObjectId(root));
                }

                data.Add(EntityObject.IdPropertyName, id);

                if (this.IsEnabledMultiTenancy)
                {
                    data.Add(GeneratedField.TenantIdName, AppSession.TenantId);
                }

                //更新版本号
                SqlHelper.Execute(target.Name, target.SqlUpdateVersion, data);

                //更新代理对象的版本号
                var dataVersion = target.Type == DataTableType.AggregateRoot
                                    ? this.GetDataVersion(id)
                                    : this.GetDataVersion(GetObjectId(root), id);

                obj.DataProxy.Version = dataVersion;
            }

            if (this.Type == DataTableType.AggregateRoot)
            {
                if (obj.IsMirror)
                {
                    //镜像被修改了,对应的公共缓冲区中的对象也要被重新加载
                    DomainBuffer.Public.Remove(obj.ObjectType, id);
                }
            }



            this.Mapper.OnUpdated(obj, this);
        }
Esempio n. 5
0
        private void Supplement(DomainObject obj, DynamicData data)
        {
            //设置代理对象
            SetDataProxy(obj, data);

            var valueObject = obj as ValueObject;

            if (valueObject != null)
            {
                object id = null;
                if (data.TryGetValue(EntityObject.IdPropertyName, out id))
                {
                    valueObject.SetId((Guid)id);
                }
            }

            obj.MarkClean(); //对象从数据库中读取,是干净的
        }