/// <summary> /// 初始化创建或删除关系操作。 /// </summary> /// <param name="context">数据上下文。</param> /// <param name="type">操作类型。</param> /// <param name="principal">主表元数据。</param> /// <param name="foreign">外表元数据。</param> /// <param name="pairs">主外键对集合。</param> internal DbCreateDropRelationOperate(DbContext context, EOperateType type, TableMetadata principal, TableMetadata foreign, ForeignPrincipalPair[] pairs) : base(context, typeof(object), CreateName(context, principal, foreign, pairs)) { _Type = type; Foreign = foreign; Principal = principal; Pairs = pairs; }
/// <summary> /// 初始化创建或删除关系操作。 /// </summary> /// <param name="context">数据上下文。</param> /// <param name="type">操作类型。</param> /// <param name="principal">主表元数据。</param> /// <param name="foreign">外表元数据。</param> /// <param name="pairs">主外键对集合。</param> internal DbCreateDropRelationOperate(DbContext context, EOperateType type, TableMetadata principal, TableMetadata foreign, ForeignPrincipalPair[] pairs) : base(context, typeof(object)) { _Type = type; Foreign = foreign; Principal = principal; Pairs = pairs; ForeignName = $"FK_{foreign.Name}_{principal.Name}_{string.Join("_", pairs.Select(a => a.ForeignKey.Name).ToArray())}_{string.Join("_", pairs.Select(a => a.PrincipalKey.Name).ToArray())}"; }
//创建删除继承表关系。 private DbMaintenanceOperateBase CreateDropKeyRelation <TSource>(EOperateType type) { var table = _Metadata.Table(typeof(TSource)); if (table.InheritSets.Length > 0) { var principal = table.InheritSets[table.InheritSets.Length - 1]; return(new DbCreateDropRelationOperate(_Context, type , principal, table, table.Keys.Select(a => new ForeignPrincipalPair(a, a)).ToArray())); } throw new InvalidOperationException(string.Format(Res.ExceptionIsNotInheritSet, typeof(TSource))); }
/// <summary> /// 创建操作。 /// </summary> /// <param name="context">数据上下文。</param> /// <param name="type">相关CLR类型。</param> /// <param name="operateType">当前操作类型。</param> /// <param name="name">操作对象名称。</param> /// <param name="newName">新名称。</param> internal DbRenameObjectOperate(DbContext context, Type type, EOperateType operateType, DbName name, string newName) : base(context, type ?? typeof(object), name) { _Type = operateType; NewName = newName; }
//创建删除普通关系。 private IEnumerable <DbMaintenanceOperateBase> CreateDropRelation(Type source, PropertyInfo property, EOperateType type) { var table = _Metadata.Table(source); var navigate = table.Navigates[property]; if (navigate.IsComposite) { var composite = (CompositeNavigateMetadata)navigate; yield return(new DbCreateDropRelationOperate(_Context, type , composite.Source, composite.RelationTable, composite.Pairs)); yield return(new DbCreateDropRelationOperate(_Context, type , composite.Target, composite.RelationTable, composite.CompositePairs)); } else { if (navigate.IsForeign.Value) { yield return(new DbCreateDropRelationOperate(_Context, type , navigate.Target, navigate.Source, navigate.Pairs)); } else { yield return(new DbCreateDropRelationOperate(_Context, type , navigate.Source, navigate.Target, navigate.Pairs)); } } }
//创建删除普通关系。 private IEnumerable <DbMaintenanceOperateBase> CreateDropRelation(Type source, PropertyInfo property, EOperateType type) { var table = _Metadata.Table(source); var navigate = table.Navigates[property]; if (navigate.IsComposite) { var composite = (CompositeNavigateMetadata)navigate; yield return(new DbCreateDropRelationOperate(_Context, type , composite.Source, composite.RelationTable, composite.Pairs)); yield return(new DbCreateDropRelationOperate(_Context, type , composite.Target, composite.RelationTable, composite.CompositePairs)); } else { DbCreateDropRelationOperate operate = null; if (navigate.IsForeign.Value) { operate = new DbCreateDropRelationOperate(_Context, type , navigate.Target, navigate.Source, navigate.Pairs); } else { operate = new DbCreateDropRelationOperate(_Context, type , navigate.Source, navigate.Target, navigate.Pairs); } if (type == EOperateType.CreateRelation) { operate.Action = navigate.GetProperty <RelationActionAttribute>(); } yield return(operate); } }
/// <summary> /// 创建操作。 /// </summary> /// <param name="context">数据上下文。</param> /// <param name="type">相关CLR类型。</param> /// <param name="operateType">当前操作类型。</param> /// <param name="name">操作对象名称。</param> internal DbDropObjectOperate(DbContext context, Type type, EOperateType operateType, DbName name) : base(context, type ?? typeof(object), name) { _Type = operateType; }
/// <summary> /// 初始化创建表操作。 /// </summary> /// <param name="context">数据上下文。</param> /// <param name="type">数据项CLR类型。</param> /// <param name="operateType">当前操作类型。</param> /// <param name="name">操作对象名称。</param> internal DbCreateTableOperate(DbContext context, Type type, EOperateType operateType, DbName name) : base(context, type, name) { _Type = operateType; }