You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用edmgen.exe生成.edmx.diagram文件?

如何生成EDMX配套的.edmx.diagram文件(Visual Studio UML图文件)

我完全懂你的困扰:用edmgen.exe成功生成了EDMX核心文件和实体类,但就是拿不到Visual Studio里通过「添加ADO.NET数据模型」自动创建的.edmx.diagram文件——这个文件负责在VS里展示数据库结构的可视化UML视图,卡在这里确实让人头疼。

核心结论:edmgen.exe不支持生成.diagram文件

先给你吃个定心丸:edmgen.exe是官方提供的命令行工具,但它的职责仅限于生成EDMX的核心结构(CSDL/SSDL/MSL)和实体类代码,完全没有生成.diagram文件的能力。这个.diagram文件是Visual Studio内部设计器专属的辅助文件,属于VS的私有功能,微软并没有开放对应的命令行参数让edmgen.exe直接生成它。

可行的解决方案

方案1:手动在Visual Studio中补全(最省心)

这是最简单的处理方式:

  • 把你已经生成好的DataModel.edmx文件添加到Visual Studio项目里
  • 双击打开EDMX文件,VS的实体数据模型设计器会自动检测是否存在对应的.edmx.diagram文件
  • 如果不存在,设计器会自动生成一个基础的.diagram文件,并且根据EDMX的内容自动布局实体关系图,完全不用手动调整

方案2:在你的代码流程中加入模板生成逻辑

因为.edmx.diagram本质是结构固定的XML文件,你可以提前准备一个模板,在生成EDMX之后自动复制并替换必要参数:

  1. 先从Visual Studio自动生成的项目里复制一个基础的.edmx.diagram文件,作为模板(比如命名为DataModel.edmx.diagram.template),放到你的Resources目录下
  2. 在你的GenerateORMFiles方法中,添加复制模板并生成最终文件的逻辑:
    // 复制并生成diagram文件
    string diagramTemplatePath = Path.Combine(ResourcesDirectory, "DataModel.edmx.diagram.template");
    string diagramTargetPath = workingDirectory + @"\DataModel.edmx.diagram";
    File.Copy(diagramTemplatePath, diagramTargetPath, true);
    
    // 可选:替换模板中的占位符(比如实体容器名称)
    string diagramContent = File.ReadAllText(diagramTargetPath);
    diagramContent = diagramContent.Replace("###EntityContainerName", "DBContext");
    File.WriteAllText(diagramTargetPath, diagramContent);
    

基础的.diagram文件结构大概是这样的(你可以根据实际实体调整):

<?xml version="1.0" encoding="utf-8"?>
<edmx:Diagrams xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
  <edmx:Diagram Id="Diagram1">
    <edmx:EntityTypeShape EntityType="Models.Student" Width="1.5" Height="1.40625" X="0.75" Y="1.5" IsExpanded="true" />
    <edmx:EntityTypeShape EntityType="Models.Course" Width="1.5" Height="1.40625" X="3" Y="1.5" IsExpanded="true" />
    <!-- 更多实体形状和关系连接线 -->
  </edmx:Diagram>
</edmx:Diagrams>

如果你的EDMX里实体数量很多,手动维护模板不太现实,这种情况下方案1会更高效。

方案3:尝试EF Power Tools(可选)

如果你需要完全自动化生成,可以试试EF Power Tools,它提供了额外的右键菜单和命令行功能,其中包含生成实体关系图的选项。不过这个工具已经停止更新,只支持较旧的EF版本,需要根据你的项目版本判断是否适用。

针对你现有代码的调整建议

在你现有代码的GenerateORMFiles方法中,完成EDMX内容替换的代码之后,插入复制diagram模板的逻辑即可。比如在这段代码之后:

File.WriteAllText(EdmxLocation, text);

添加处理diagram文件的代码,就能自动生成对应的.edmx.diagram文件了。

内容的提问来源于stack exchange,提问作者Ganesh Kamath - 'Code Frenzy'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:49:23