Exemplo n.º 1
0
        public PersistanceColumnInfo(EntityPropertyMeta propertyMeta, ColumnMeta columnMeta, PersistanceTableInfo table)
        {
            _propertyMeta = propertyMeta;
            _columnMeta   = columnMeta;
            this.Table    = table;

            this.DataType     = propertyMeta.PropertyType;
            this.IsIdentity   = columnMeta.IsIdentity;
            this.IsPrimaryKey = columnMeta.IsPrimaryKey;
            this.Property     = propertyMeta.ManagedProperty as IProperty;
        }
        /// <summary>
        /// 通过外键递归查找引用实体的数据并执行数据归档操作。
        /// </summary>
        /// <param name="forginKeyValue">外键的值。</param>
        /// <param name="propertyMetaData">外键属性元数据。</param>
        /// <param name="level">表示递归深度。</param>
        private void RecursiveQueryReferenceProperties(object forginKeyValue, EntityPropertyMeta propertyMetaData, int level)
        {
            ReferenceInfo referenceInfo;

            if (this._archivingEntity.TryGetValue(propertyMetaData.ReferenceInfo.RefType.FullName, out referenceInfo))
            {
                var entity = referenceInfo.Repository.GetById(forginKeyValue);
                if (entity == null)
                {
                    return;
                }

                //
                // TODO:  存储到历史表里面
                //
                // this.SaveToHistory(entity);

                entity.PersistenceStatus = PersistenceStatus.Deleted;

                var newLevel = level + 1;
                this.ArchivingReferenceData(entity, propertyMetaData.ReferenceInfo.RefTypeMeta, newLevel);


                var key       = referenceInfo.Repository.GetType().FullName + "_" + level;
                var cacheItem = this._archiveDataCache.FirstOrDefault(c => c.Key == key);
                if (cacheItem == null)
                {
                    cacheItem = new ArchivingDataCahceInfo(level, referenceInfo.Repository);
                    cacheItem.EntityList.Add(entity);
                    this._archiveDataCache.Add(cacheItem);
                }
                else
                {
                    cacheItem.EntityList.Add(entity);
                }

                //this.CacheNeedArchivingData(level, entity);

                try
                {
                    // TODO: 删除原始表里面的数据
                    // referenceInfo.Repository.Save(entity);
                }
                catch (Exception exception)
                {
                    throw new DataTableMigrationException("删除原始数据失败。", exception);
                }
            }
        }
Exemplo n.º 3
0
 internal RdbColumnInfo(
     string name,
     EntityPropertyMeta propertyMeta,
     ColumnMeta columnMeta,
     RdbTableInfo table,
     DbType dbType
     )
 {
     this.Table        = table;
     this.Name         = name;
     this.Meta         = columnMeta;
     this.PropertyType = TypeHelper.IgnoreNullable(propertyMeta.PropertyType);
     this.DbType       = dbType;
     this.Property     = propertyMeta.ManagedProperty as IProperty;
 }
Exemplo n.º 4
0
 internal PersistanceColumnInfo(
     string name,
     EntityPropertyMeta propertyMeta,
     ColumnMeta columnMeta,
     PersistanceTableInfo table,
     DbTypeConverter dbTypeConverter
     )
 {
     this.Table        = table;
     this.Name         = name;
     this.Meta         = columnMeta;
     this.PropertyType = TypeHelper.IgnoreNullable(propertyMeta.PropertyType);
     this.DbType       = columnMeta.DbType ?? dbTypeConverter.FromClrType(this.PropertyType);
     this.Property     = propertyMeta.ManagedProperty as IProperty;
 }
Exemplo n.º 5
0
        /// <summary>
        /// 找到实体中对应聚合关系中的父实体引用属性元数据。
        ///
        /// 注意,此函数返回的是引用实体属性,而非引用 Id 属性。
        /// </summary>
        /// <param name="throwOnNotFound"></param>
        /// <returns></returns>
        public EntityPropertyMeta FindParentPropertyInfo(bool throwOnNotFound = false)
        {
            if (!this._parentPropertyCacheLoaded)
            {
                var result = this.EntityMeta.FindParentReferenceProperty();
                if (result != null)
                {
                    this._parentPropertyCache       = result;
                    this._parentPropertyCacheLoaded = true;
                }
            }

            if (this._parentPropertyCache == null && throwOnNotFound)
            {
                throw new NotSupportedException(this.EntityType + " 类型中没有注册引用类型为 ReferenceType.Parent 的父引用属性。");
            }

            return(this._parentPropertyCache);
        }