開發簡單桌面軟件:增刪改查 (CRUD)、彈出子窗口、連接數據庫。屬於典型「數據驅動型表單應用」。
| 維度 | Windows Forms (WinForms) | WPF (Windows Presentation Foundation) |
|---|---|---|
| 學習曲線 | 極低,拖拽設計器、事件驅動、代碼直觀 | 中等,XAML 聲明式、綁定/模板/樣式/視覺樹概念較多 |
| 開發效率 (簡單CRUD) | 極高,DataGridView + BindingSource 幾分鐘成型 | 高,但需掌握 MVVM、DataTemplate、Converter 等 |
| 界面美觀度/定制 | 原生風格,美化需第三方控件或 OwnerDraw | 極強,矢量渲染、動畫、模板、控件模板徹底重構外觀 |
| 性能/渲染 | GDI+ 軟渲染,高 DPI 模糊需配置 | DirectX 硬件加速,原生高 DPI、流暢動畫 |
| 架構模式 | 傳統 Code-Behind,易寫成「胖界面」 | 原生支持 MVVM,關注點分離,易測試、易維護 |
| 跨平台 | .NET Core 3.0+ 支持僅 Windows | .NET Core 3.0+ 僅 Windows;Avalonia/Uno Platform 可跨平台 |
| 生態/第三方控件 | 成熟豐富 (DevExpress, Telerik, ComponentOne) | 同樣豐富,且開源社區活躍 |
如果:團隊無 WPF 經驗、項目極簡、交付緊、僅需標準表單交互
→ 選 WinForms (.NET 6/7/8 + WinForms)
如果:需漂亮界面、動畫、觸控、高 DPI、長期維護、團隊願學習
→ 選 WPF (.NET 6/7/8 + WPF) + MVVM (CommunityToolkit.Mvvm)
如果:未來可能跨平台 (Linux/macOS/Web)
→ 選 Avalonia UI (XAML 兼容 WPF) 或 Blazor Hybrid (Web 技術做桌面)
| 方案 | 特點 | 適用場景 |
|---|---|---|
| Entity Framework Core (推薦) | ORM、強類型 LINQ、遷移、多數據庫、.NET 官方主推 | 新項目、代碼優先、中小型數據模型 |
| Dapper | 微型 ORM、手寫 SQL、性能極高、無跟蹤開銷 | 高性能場景、複雜 SQL、存儲過程多 |
| ADO.NET (SqlConnection/Command) | 最底層、完全控制、樣板代碼多 | 極簡工具、舊系統維護、學習原理 |
| FreeSql / SqlSugar | 國產 ORM、功能豐富、中文文檔好 | 國產化替換、偏好流式 API |
MyApp/
├── MyApp.csproj // net8.0-windows true
├── Program.cs // Application.Run(new MainForm());
├── MainForm.cs // DataGridView + BindingNavigator + CRUD 按鈕
├── Models/
│ └── Product.cs // 實體類 + DataAnnotations
├── Data/
│ ├── AppDbContext.cs // DbContext + DbSet
│ └── Migrations/ // dotnet ef migrations add Init
├── Services/
│ └── ProductService.cs // 業務邏輯封裝 (可選)
└── appsettings.json // ConnectionStrings
// Program.cs (.NET 6+ minimal)
ApplicationConfiguration.Initialize();
Application.Run(new MainForm());
// MainForm.cs 核心綁定
private void MainForm_Load(object sender, EventArgs e) {
using var db = new AppDbContext();
var list = db.Products.ToList();
var binding = new BindingList(list);
dataGridView1.DataSource = binding;
// BindingNavigator 自動配合 BindingList 實現增刪改查 UI
}
// EF Core 新增
private void btnAdd_Click(object sender, EventArgs e) {
using var db = new AppDbContext();
var p = new Product { Name = "新產品", Price = 99 };
db.Products.Add(p);
db.SaveChanges();
// 刷新 BindingList
}
**簡單 CRUD 桌面應用首選:.NET 8 + WinForms + EF Core**——開發最快、學習成本最低、生態最成熟。若追求現代界面與架構,投資學習 **WPF + MVVM** 長期收益更大。數據庫操作統一推薦 **EF Core**,代碼優先、強類型、遷移管理一站式解決。