Skip to content

可视化建模工具(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 DeveloperEF Core Power ToolsVS Designer
ER 图设计✅ 强大⚠️ 只读✅ 基础
代码生成✅ 可定制❌ 固定❌ 固定
多ORM支持✅ 4种❌ 仅EF Core❌ 仅EF6
模型更新✅ 增量✅ 完全重新生成✅ 增量
T4模板✅ 支持❌ 不支持❌ 不支持
价格💰 商业✅ 免费✅ 免费
学习曲线中低低

实际应用场景 ​

场景 1: 大型遗留数据库 ​

挑战: 200+ 表,复杂关系,命名不规范

解决方案:

  1. 使用 Entity Developer 逆向工程
  2. 可视化调整实体命名
  3. 配置复杂关系映射
  4. 生成标准化代码

效果:

  • ⏱️ 节省 80% 手工编码时间
  • ✅ 统一命名规范
  • 📊 清晰的 ER 文档

场景 2: 团队协作开发 ​

挑战: 多人修改数据库,模型同步困难

解决方案:

  1. 共享 .edml 模型文件
  2. 定期从生产库更新模型
  3. 代码生成模板统一
  4. 版本控制集成

效果:

  • 🤝 团队模型一致
  • 🔄 自动化同步
  • 📝 变更可追溯

场景 3: 多租户架构 ​

挑战: 每个租户独立 Schema,需要动态切换

解决方案:

  1. 设计通用模型
  2. 自定义模板添加 TenantId
  3. 配置 Schema 切换逻辑
  4. 生成多租户感知代码

生成代码:

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 极高! 🚀

基于 MIT 许可发布