如何从EF Core中的模型生成类图?

22
我们正在使用ASP.NET MVC Core和Entity Framework Core构建应用程序,并且我们的应用程序中有许多类。在以前的Entity Framework版本中,我们会使用这种方法来生成一个类图的edmx文件:

我们正在使用ASP.NET MVC Core和Entity Framework Core构建应用程序,并且我们的应用程序中有很多类。在以前的Entity Framework版本中,我们使用以下方法为类图生成edmx文件:

void ExportMappings(DbContext context, string edmxFile)
{
     var settings = new XmlWriterSettings { Indent = true };
     using (XmlWriter writer = XmlWriter.Create(edmxFile, settings))
     {
         System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(context, writer);
     }
}

但是在 EF Core 中似乎没有这样的功能。我想知道在 Entity Framework Core 中是否有相应版本来实现这个功能。


1
据我所知,目前没有生成图表的功能。 - H. Herzl
看一下这个链接(https://dev59.com/OmMl5IYBdhLWcg3wJEBS),可能会有帮助。 - Ali
1
@AliAshoori 这不是针对 EF Core 的。 - Sirwan Afifi
3个回答

8

这个家伙想到了一个好主意!你只需要添加他的Nuget包EntityFrameworkCore.Diagrams1,它就会在您的网站中创建一个控制器 (/db-diagram/),显示您上下文的图表。详情请参见他的网站并查看演示。仅适用于净标准1.6即.Net Core 1.0项目。呜呜呜!

更新:或者您可以使用此工具来为.Net Core 2.0 / EF Core 2.0从类创建.Dgml文件。它有点小问题,您可以通过Visual Studio市场或其他方式安装。

https://github.com/ErikEJ/SqlCeToolbox/wiki/EF-Core-Power-Tools

该工具提供了一种选项,可添加扩展方法以从dbcontext文件创建DGML。我使用了这个选项,并创建了这个控制器,其中索引页面在您访问mysite.com/dgml时生成并向您提供dgml文件。与上面的那个想法相同。此处代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace OL.Web.AffiliateDb.Api.Controllers
{   
    [Route("Dgml")]
    public class DgmlController : Controller
    {
        public SomeDbContext _context { get; }


        public DgmlController( SomeDbContext context)
        {            
          _context = context;                       
        }

        /// <summary>
        /// Creates a DGML class diagram of most of the entities in the project wher you go to localhost/dgml
        /// </summary>
        /// <returns>a DGML class diagram</returns>
        [HttpGet]
        public IActionResult Get()
        {

            System.IO.File.WriteAllText(Directory.GetCurrentDirectory() + "\\Entities.dgml",
                _context.AsDgml(), // https://github.com/ErikEJ/SqlCeToolbox/wiki/EF-Core-Power-Tools
                System.Text.Encoding.UTF8);

            var file = System.IO.File.OpenRead(Directory.GetCurrentDirectory() + "\\Entities.dgml");
            var response = File(file, "application/octet-stream", "Entities.dgml");
            return response;
        }
    }
}

1
谢谢!您能将您的另一个回答作为此问题的更新添加吗?这个回答是针对 EF Core 1.0 的,而另一个回答是针对 2.0 的。我认为明确说明会更有帮助。 - aaron
@aaron,已完成,我也在寻找这个!第二个人在github上公开了他创建dgmls的代码。 - redwards510
接下来有两个提示:在此编辑(4/28/2019,~1730 EDT)时,从VS Marketplace获得的EF-Core-Power-Tools版本2.2.12与VS 2019不兼容,至少无法生成图表。请改用Open VSIX gallery的2.2.59版本(或更高版本)。 [VSIX Gallery - nightly builds](https://github.com/madskristensen/VsixGalleryExtension)也可用作扩展程序。然后从VS安装程序中获取DGML Editor。这比我预期的要费劲些。 - R.D. Alkire

3

0
为什么不使用Visual Studio类设计器呢? 您需要通过Visual Studio安装程序将其添加到工作区。在Visual Studio 2017安装程序中,您需要从组件列表中添加它。请参阅此文章获取更多信息。

1
不支持该功能的 .NET Core 项目。 - serge
2
@Serge 不行,但你可以采用一种变通方法。创建一个标准的 .net framework 控制台应用程序。从你的 .net core 项目中添加实体模型链接。现在将它们添加到类图中并进行编辑。 - redwards510

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接