/// <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;
 }
示例#2
0
        /// <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())}";
        }
示例#3
0
        //创建删除继承表关系。
        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)));
        }
示例#4
0
 /// <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;
 }
示例#5
0
        //创建删除普通关系。
        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));
                }
            }
        }
示例#6
0
        //创建删除普通关系。
        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);
            }
        }
示例#7
0
 /// <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;
 }
示例#8
0
 /// <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;
 }