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); } } }
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; }
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; }
/// <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); }