Appearance
可视化建模工具(Entity Developer)
概述
Entity Developer 是一款强大的可视化 EF Core 建模工具,支持从数据库生成实体模型、设计 ER 图、自定义代码生成模板等。相比命令行逆向工程,它提供更直观的图形界面和更灵活的配置选项。
官方网站: https://www.devart.com/entitydeveloper/
价格: 商业软件(提供免费试用)
核心功能
1. 可视化 ER 图设计
- ✅ 拖拽式表关系设计
- ✅ 自动生成外键约束
- ✅ 实时验证模型完整性
- ✅ 导出为图片/PDF
2. 双向同步
- Database First: 从数据库生成模型
- Model First: 从模型生成数据库
- Code First: 生成 C# 代码
3. 多 ORM 支持
- EF Core (所有版本)
- Entity Framework 6
- LINQ to SQL
- NHibernate
4. 代码生成模板
- T4 模板引擎
- 自定义代码风格
- 支持部分类扩展
安装与设置
1. 下载安装
1. 访问 https://www.devart.com/entitydeveloper/download.html
2. 下载最新版本
3. 运行安装程序
4. 选择 Visual Studio 集成
5. 启动试用或激活许可证2. Visual Studio 集成
安装后,在 Visual Studio 中会新增:
- 新建项 → DevArt Entity Developer Model
- 右键菜单 → Update Model from Database
- 工具栏 → Entity Developer 图标
快速开始
场景 1: 从现有数据库生成模型
步骤 1: 创建新项目
Visual Studio:
1. 右键项目 → 添加 → 新建项
2. 选择 "DevArt Entity Developer Model"
3. 命名为 "AppModel.edmx"
4. 点击 "添加"步骤 2: 选择数据源
向导步骤:
1. 选择 "Generate from database"
2. 选择数据库连接(SQL Server/PostgreSQL/MySQL等)
3. 测试连接
4. 点击 "下一步"步骤 3: 选择表和视图
对象选择器:
☑ Users
☑ Products
☑ Orders
☑ OrderItems
☐ Logs (不需要的表)
选项:
☑ Import selected tables and views
☑ Pluralize or singularize generated object names
☑ Include foreign key columns in the model步骤 4: 配置映射
可视化配置界面:
- 表名 → 类名 (Users → User)
- 列名 → 属性名 (user_name → UserName)
- 数据类型 → CLR类型 (nvarchar → string)
- 主键、外键自动识别步骤 5: 生成代码
点击 "Finish":
- 自动生成 .edml 模型文件
- 生成 DbContext 类
- 生成实体类
- 生成 Fluent API 配置生成的代码示例
DbContext
csharp
public partial class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options) { }
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<Order> Orders { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new UserConfiguration());
modelBuilder.ApplyConfiguration(new ProductConfiguration());
modelBuilder.ApplyConfiguration(new OrderConfiguration());
base.OnModelCreating(modelBuilder);
}
}实体类
csharp
public partial class User
{
public int Id { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}Fluent API 配置
csharp
public class UserConfiguration : IEntityTypeConfiguration<User>
{
public void Configure(EntityTypeBuilder<User> builder)
{
builder.ToTable("Users");
builder.HasKey(u => u.Id);
builder.Property(u => u.UserName)
.IsRequired()
.HasMaxLength(100);
builder.Property(u => u.Email)
.IsRequired()
.HasMaxLength(200);
builder.HasIndex(u => u.Email).IsUnique();
builder.HasMany(u => u.Orders)
.WithOne(o => o.User)
.HasForeignKey(o => o.UserId);
}
}高级功能
1. 模型更新
当数据库架构变更时:
1. 右键 .edml 文件
2. 选择 "Update Model from Database"
3. 选择变更的表
4. 点击 "刷新"
5. 自动同步模型和代码优势:
- ✅ 保留手动修改
- ✅ 增量更新
- ✅ 冲突检测
2. 自定义代码生成模板
编辑 T4 模板
1. 打开 Model.tt (实体模板)
2. 修改代码生成逻辑
3. 保存后自动重新生成示例: 添加审计接口
t4
// Model.tt 模板修改
public partial class <#= entity.Name #> : IAuditable
{
// 原有属性...
public string CreatedBy { get; set; }
public DateTime CreatedAt { get; set; }
public string ModifiedBy { get; set; }
public DateTime? ModifiedAt { get; set; }
}3. 验证规则
在模型设计器中添加验证:
选中属性 → 属性窗口 → Validation:
- Required: ☑
- MaxLength: 200
- RegularExpression: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$生成代码:
csharp
public class User
{
[Required]
[MaxLength(200)]
[RegularExpression(@"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")]
public string Email { get; set; }
}4. 继承映射配置
可视化配置 TPH/TPT/TPC:
1. 右键设计器 → Add → Inheritance
2. 选择基类和派生类
3. 配置鉴别器列
4. 自动生成映射代码与其他工具对比
| 特性 | Entity Developer | EF Core Power Tools | VS Designer |
|---|---|---|---|
| ER 图设计 | ✅ 强大 | ⚠️ 只读 | ✅ 基础 |
| 代码生成 | ✅ 可定制 | ❌ 固定 | ❌ 固定 |
| 多ORM支持 | ✅ 4种 | ❌ 仅EF Core | ❌ 仅EF6 |
| 模型更新 | ✅ 增量 | ✅ 完全重新生成 | ✅ 增量 |
| T4模板 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 价格 | 💰 商业 | ✅ 免费 | ✅ 免费 |
| 学习曲线 | 中 | 低 | 低 |
实际应用场景
场景 1: 大型遗留数据库
挑战: 200+ 表,复杂关系,命名不规范
解决方案:
- 使用 Entity Developer 逆向工程
- 可视化调整实体命名
- 配置复杂关系映射
- 生成标准化代码
效果:
- ⏱️ 节省 80% 手工编码时间
- ✅ 统一命名规范
- 📊 清晰的 ER 文档
场景 2: 团队协作开发
挑战: 多人修改数据库,模型同步困难
解决方案:
- 共享 .edml 模型文件
- 定期从生产库更新模型
- 代码生成模板统一
- 版本控制集成
效果:
- 🤝 团队模型一致
- 🔄 自动化同步
- 📝 变更可追溯
场景 3: 多租户架构
挑战: 每个租户独立 Schema,需要动态切换
解决方案:
- 设计通用模型
- 自定义模板添加 TenantId
- 配置 Schema 切换逻辑
- 生成多租户感知代码
生成代码:
csharp
public class MultiTenantDbContext : DbContext
{
private readonly string _tenantSchema;
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
entityType.SetSchema(_tenantSchema);
}
base.OnModelCreating(modelBuilder);
}
}最佳实践
✅ 推荐做法
1. 使用部分类扩展
csharp
// 生成的代码(不要手动修改)
public partial class User { }
// 自定义扩展(安全)
public partial class User
{
public string FullName => $"{FirstName} {LastName}";
public void Validate()
{
if (string.IsNullOrWhiteSpace(Email))
throw new ValidationException("Email is required");
}
}2. 版本控制模型文件
bash
# 提交 .edml 文件到 Git
git add Models/AppModel.edml
git commit -m "Update model: added Product table"3. 定期备份模板
保存自定义的 T4 模板到团队共享位置,
避免成员离职导致模板丢失❌ 避免的陷阱
1. 不要直接修改生成的代码
csharp
// ❌ 错误: 下次生成会被覆盖
public partial class User
{
public void CustomMethod() { } // 会丢失!
}
// ✅ 正确: 使用部分类
public partial class User
{
public void CustomMethod() { } // 安全
}2. 不要忽略模型验证
生成模型后:
1. 检查所有关系映射
2. 验证数据类型转换
3. 测试 CRUD 操作
4. 审查生成的 SQL替代方案
免费工具
1. EF Core Power Tools
优点:
- ✅ 完全免费
- ✅ 开源
- ✅ 持续更新
缺点:
- ⚠️ 无可视化设计器
- ⚠️ 代码生成不可定制
适用: 小型项目,预算有限
2. Visual Studio Designer (EF6)
优点:
- ✅ 内置于 VS
- ✅ 简单易用
缺点:
- ❌ 不支持 EF Core
- ❌ 功能有限
适用: 传统 EF6 项目
商业工具
1. Entity Developer (DevArt) ⭐⭐⭐⭐⭐
价格: $299/开发者
优势: 功能最全面,支持多 ORM
2. LLBLGen Pro
价格: $499/开发者
优势: 强大的代码生成引擎
总结
何时使用 Entity Developer?
✅ 推荐使用:
- 大型复杂数据库(50+ 表)
- 需要定制化代码生成
- 团队协作开发
- 遗留系统现代化改造
- 需要可视化 ER 文档
❌ 不推荐:
- 小型简单项目(< 10 表)
- 预算有限(使用免费的 EF Core Power Tools)
- 纯 Code First 工作流
- 不需要可视化设计
投资回报
时间节省:
- 手工编码: 200 表 × 30分钟 = 100 小时
- Entity Developer: 10 小时
- 节省: 90 小时 ≈ 11 个工作日
质量提升:
- ✅ 统一命名规范
- ✅ 减少人为错误
- ✅ 完整文档
结论: 对于中型以上项目,ROI 极高! 🚀