/// <summary> /// 添加外键。 /// </summary> /// <typeparam name="TPrincipal">主键类。</typeparam> /// <param name="columns">字段。</param> /// <param name="principalColumns">主键列。</param> /// <param name="onUpdate">更新时候对应的操作。</param> /// <param name="onDelete">删除时候对应的操作。</param> /// <param name="action">添加扩展操作。</param> /// <returns>返回迁移构建实例。</returns> public virtual CreateTableBuilder <TEntity> ForeignKey <TPrincipal>( Expression <Func <TEntity, object> > columns, Expression <Func <TPrincipal, object> > principalColumns = null, ReferentialAction onUpdate = ReferentialAction.NoAction, ReferentialAction onDelete = ReferentialAction.NoAction, Action <OperationBuilder <AddForeignKeyOperation> > action = null) { Check.NotNull(columns, nameof(columns)); var operation = new AddForeignKeyOperation { Table = Operation.Table, Columns = columns.GetPropertyNames(), PrincipalTable = typeof(TPrincipal).GetTableName(), OnUpdate = onUpdate, OnDelete = onDelete }; if (principalColumns == null) { operation.PrincipalColumns = operation.Columns; } else { operation.PrincipalColumns = principalColumns.GetPropertyNames(); } operation.Name = OperationHelper.GetName(NameType.ForeignKey, operation.Table, operation.Columns, operation.PrincipalTable); Operation.ForeignKeys.Add(operation); action?.Invoke(new OperationBuilder <AddForeignKeyOperation>(operation)); return(this); }
/// <summary> /// 添加唯一键。 /// </summary> /// <param name="columns">列。</param> /// <param name="action">添加扩展信息。</param> /// <returns>返回迁移构建实例。</returns> public virtual CreateTableBuilder <TEntity> UniqueConstraint( Expression <Func <TEntity, object> > columns, Action <OperationBuilder <AddUniqueConstraintOperation> > action = null) { Check.NotNull(columns, nameof(columns)); var operation = new AddUniqueConstraintOperation { Table = Operation.Table, Columns = columns.GetPropertyNames() }; operation.Name = OperationHelper.GetName(NameType.UniqueKey, operation.Table, operation.Columns); Operation.UniqueConstraints.Add(operation); action?.Invoke(new OperationBuilder <AddUniqueConstraintOperation>(operation)); return(this); }
/// <summary> /// 添加主键。 /// </summary> /// <param name="action">添加扩展信息。</param> /// <returns>返回迁移构建实例。</returns> public virtual CreateTableBuilder <TEntity> PrimaryKey(Action <OperationBuilder <AddPrimaryKeyOperation> > action = null) { var key = _entity.PrimaryKey; if (key == null) { return(this); } var operation = new AddPrimaryKeyOperation { Table = Operation.Table, Columns = key.Properties.Select(p => p.Name).ToArray() }; operation.Name = OperationHelper.GetName(NameType.PrimaryKey, operation.Table); Operation.PrimaryKey = operation; action?.Invoke(new OperationBuilder <AddPrimaryKeyOperation>(operation)); return(this); }