entity 오류로인해 제거해야해서 . 제거전 백업
This commit is contained in:
184
DBMigration/Forms/MainForm.cs
Normal file
184
DBMigration/Forms/MainForm.cs
Normal file
@@ -0,0 +1,184 @@
|
||||
using DBMigration.Models;
|
||||
using DBMigration.Services;
|
||||
|
||||
namespace DBMigration.Forms
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
private readonly DatabaseService _databaseService;
|
||||
private readonly MigrationService _migrationService;
|
||||
private ConnectionInfo? _sourceConnection;
|
||||
private ConnectionInfo? _targetConnection;
|
||||
private List<DatabaseObject>? _databaseObjects;
|
||||
private readonly CancellationTokenSource _cancellationTokenSource;
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
_databaseService = new DatabaseService();
|
||||
_migrationService = new MigrationService();
|
||||
_cancellationTokenSource = new CancellationTokenSource();
|
||||
_databaseObjects = new List<DatabaseObject>();
|
||||
}
|
||||
|
||||
private async void btnConnectSource_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (var form = new ConnectionForm())
|
||||
{
|
||||
if (form.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
_sourceConnection = form.ConnectionInfo;
|
||||
await LoadDatabaseObjectsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadDatabaseObjectsAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
btnConnectSource.Enabled = false;
|
||||
treeObjects.Nodes.Clear();
|
||||
|
||||
// 테이블, 뷰, 프로시저 노드 생성
|
||||
var tableNode = treeObjects.Nodes.Add("Tables");
|
||||
var viewNode = treeObjects.Nodes.Add("Views");
|
||||
var procNode = treeObjects.Nodes.Add("Stored Procedures");
|
||||
|
||||
// 테이블 로드
|
||||
tableNode.Nodes.Add("Loading...");
|
||||
treeObjects.ExpandAll();
|
||||
await LoadTablesAsync(tableNode);
|
||||
|
||||
// 뷰 로드
|
||||
viewNode.Nodes.Add("Loading...");
|
||||
await LoadViewsAsync(viewNode);
|
||||
|
||||
// 프로시저 로드
|
||||
procNode.Nodes.Add("Loading...");
|
||||
await LoadProceduresAsync(procNode);
|
||||
|
||||
btnConnectSource.Enabled = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"데이터베이스 객체 로드 중 오류 발생: {ex.Message}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
btnConnectSource.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadTablesAsync(TreeNode parentNode)
|
||||
{
|
||||
try
|
||||
{
|
||||
parentNode.Nodes.Clear();
|
||||
parentNode.Nodes.Add("Loading...");
|
||||
|
||||
await foreach (var table in _databaseService.GetTables(_sourceConnection!))
|
||||
{
|
||||
if (_cancellationTokenSource.Token.IsCancellationRequested)
|
||||
return;
|
||||
|
||||
var node = new TreeNode($"{table.Schema}.{table.Name}")
|
||||
{
|
||||
Tag = table,
|
||||
Checked = table.IsSelected
|
||||
};
|
||||
|
||||
parentNode.Nodes.Add(node);
|
||||
await Task.Yield();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
parentNode.Nodes.Clear();
|
||||
parentNode.Nodes.Add($"Error: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadViewsAsync(TreeNode parentNode)
|
||||
{
|
||||
try
|
||||
{
|
||||
parentNode.Nodes.Clear();
|
||||
parentNode.Nodes.Add("Loading...");
|
||||
|
||||
await foreach (var view in _databaseService.GetViews(_sourceConnection!))
|
||||
{
|
||||
if (_cancellationTokenSource.Token.IsCancellationRequested)
|
||||
return;
|
||||
|
||||
var node = new TreeNode($"{view.Schema}.{view.Name}")
|
||||
{
|
||||
Tag = view,
|
||||
Checked = view.IsSelected
|
||||
};
|
||||
|
||||
parentNode.Nodes.Add(node);
|
||||
await Task.Yield();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
parentNode.Nodes.Clear();
|
||||
parentNode.Nodes.Add($"Error: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadProceduresAsync(TreeNode parentNode)
|
||||
{
|
||||
try
|
||||
{
|
||||
parentNode.Nodes.Clear();
|
||||
parentNode.Nodes.Add("Loading...");
|
||||
|
||||
await foreach (var proc in _databaseService.GetProcedures(_sourceConnection!))
|
||||
{
|
||||
if (_cancellationTokenSource.Token.IsCancellationRequested)
|
||||
return;
|
||||
|
||||
var node = new TreeNode($"{proc.Schema}.{proc.Name}")
|
||||
{
|
||||
Tag = proc,
|
||||
Checked = proc.IsSelected
|
||||
};
|
||||
|
||||
parentNode.Nodes.Add(node);
|
||||
await Task.Yield();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
parentNode.Nodes.Clear();
|
||||
parentNode.Nodes.Add($"Error: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnFormClosing(FormClosingEventArgs e)
|
||||
{
|
||||
_cancellationTokenSource.Cancel();
|
||||
base.OnFormClosing(e);
|
||||
}
|
||||
|
||||
private void btnMigrate_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_targetConnection == null)
|
||||
{
|
||||
MessageBox.Show("대상 데이터베이스 연결 정보를 먼저 설정하세요.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
return;
|
||||
}
|
||||
|
||||
var selectedObjects = _databaseObjects.Where(o => o.IsSelected).ToList();
|
||||
if (selectedObjects.Count == 0)
|
||||
{
|
||||
MessageBox.Show("마이그레이션할 객체를 선택하세요.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
return;
|
||||
}
|
||||
|
||||
using (var form = new ProgressForm(selectedObjects, _sourceConnection, _targetConnection))
|
||||
{
|
||||
form.ShowDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user