8.3 数据存储与访问
概述
在WPF应用程序开发中,数据存储与访问是实现业务逻辑的核心环节。本节将介绍WPF中常见的数据存储方式、数据访问技术以及最佳实践,帮助开发者构建高效、可维护的数据层。
8.3.1 数据存储方式
1. 本地文件存储
- JSON/XML文件:轻量级数据存储方案,适合配置信息或小型数据集。
<!-- 示例:XML数据存储 --> <Users> <User Name="Alice" Role="Admin"/> <User Name="Bob" Role="User"/> </Users> - SQLite数据库:嵌入式关系型数据库,支持复杂查询和事务处理。
2. 数据库访问
- Entity Framework Core:推荐ORM框架,支持SQL Server、MySQL等。
// 示例:EF Core数据上下文 public class AppDbContext : DbContext { public DbSet<Product> Products { get; set; } } - Dapper:轻量级ORM,适合高性能场景。
3. 云存储与API集成
- Azure Blob Storage:存储非结构化数据(如图片、日志)。
- REST API调用:通过
HttpClient与后端服务交互。
8.3.2 数据绑定与持久化
1. 数据绑定实践
- 使用
ObservableCollection<T>实现动态UI更新:public ObservableCollection<Employee> Employees { get; } = new(); - 通过
INotifyPropertyChanged实现属性变更通知。
2. 数据持久化策略
- 事务处理:确保数据一致性。
using var transaction = context.Database.BeginTransaction(); try { context.SaveChanges(); transaction.Commit(); } catch { transaction.Rollback(); } - 缓存机制:减少数据库访问频率。
8.3.3 安全与性能优化
1. 数据安全
- 连接字符串加密:使用
ConfigurationBuilder保护敏感信息。 - 参数化查询:防止SQL注入。
2. 性能优化技巧
- 异步数据加载:避免UI冻结。
private async Task LoadDataAsync() { Employees = await _context.Employees.ToListAsync(); } - 分页查询:限制一次性加载的数据量。
8.3.4 实战示例:产品管理系统
场景描述
构建一个支持CRUD操作的产品管理模块,包含以下功能:
- 从SQLite数据库加载产品列表。
- 通过MVVM模式实现数据绑定。
- 支持本地数据备份为JSON文件。
关键代码片段
// ViewModel层
public class ProductViewModel : INotifyPropertyChanged {
private readonly AppDbContext _context;
public ObservableCollection<Product> Products { get; } = new();
public async Task LoadProductsAsync() {
var products = await _context.Products.ToListAsync();
Products.Clear();
foreach (var p in products) Products.Add(p);
}
}
总结
| 技术选型 | 适用场景 | 工具推荐 |
|---|---|---|
| 文件存储 | 小型配置/非关系型数据 | Newtonsoft.Json |
| SQLite | 本地结构化数据 | EF Core + SQLite |
| 云服务 | 分布式/多端同步 | Azure SDK |
通过合理选择存储方案和优化数据访问逻辑,可以显著提升WPF应用的响应速度和用户体验。
