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

时间:2016-12-04 07:10:44

标签: c# entity-framework-core

我们正在使用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中是否有相同的版本。

3 个答案:

答案 0 :(得分:3)

看起来EF核心当前没有这个功能,这里是feature comparison between EF6 and EFCore

答案 1 :(得分:2)

This guy is onto something good!您只需添加他的nuget包EntityFrameworkCore.Diagrams 1,它就会在您的网站中创建一个控制器(/ db-diagram /),显示您的上下文图表。有关详细信息和演示,请参阅his site。这仅适用于netstandard 1.6 aka .Net Core 1.0项目。 BOO!

更新:或者您也可以将此用于.Net Core 2.0 / EF Core 2.0,从类中创建.Dgml文件。这是一个小马车。使用Visual Studio marketplace或其他任何方式安装它。

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

可以选择添加扩展方法,以便从dbcontext文件创建DGML。我接下来创建了这个控制器生成索引页面的控制器,然后在你去mysite.com/dgml时为你提供dgml文件。与上面的想法相同。 gist here

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;
        }
    }
}

答案 2 :(得分:0)

为什么不使用Visual Studio类设计器呢? 您需要使用Visual Studio Installer将其添加到工作区。在Visual Studio 2017安装程序上,您需要从组件列表中添加它。有关详细信息,请参阅此article