How to generate class diagram from models in EF Core?

13,489

Solution 1

This guy is onto something good! You just add his nuget package EntityFrameworkCore.Diagrams1 and it creates a controller (/db-diagram/) in your website that displays a diagram of your context. See his site for details and a demo. This is only for netstandard 1.6 aka .Net Core 1.0 projects. Boo!

Update: Alternatively you can use this for .Net Core 2.0 / EF Core 2.0 to create .Dgml files from the classes. It is a little buggy. Install it using Visual Studio marketplace or whatever.

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

This has an option to add an extension method for creating a DGML from your dbcontext file. I took that and created this controller where the index page generates and then serves you the dgml file when you go to mysite.com/dgml. The same idea as the one above. 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;
        }
    }
}

Solution 2

It looks like EF core doesn't have that feature currently, here is a feature comparison between EF6 and EFCore.

Share:
13,489

Related videos on Youtube

Sirwan Afifi
Author by

Sirwan Afifi

A day without learning is a lost day.

Updated on June 04, 2022

Comments

  • Sirwan Afifi
    Sirwan Afifi almost 2 years

    We are building an application using ASP.NET MVC Core and Entity Framework Core and we have the whole bunch of classes in our application. In previous versions of Entity Framework, we would use this method for generating an edmx file for class diagram:

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

    but it seems that there's no such feature in EF Core. I wonder if there's an equivalent version for doing this in Entity Framework Core.

  • serge
    serge almost 7 years
    does not have that feature the .NET Core projects
  • redwards510
    redwards510 over 6 years
    @Serge No, but you can do a workaround. Create a standard .net framework console app. Add in links to your entity models from your .net core project. Now add them to the class diagram and edit.
  • aaron
    aaron over 6 years
    Thanks for this! Can you add your other answer as an update to this? This one is for EF Core 1.0 and the other is for 2.0 - I think it is helpful to say so.
  • redwards510
    redwards510 over 6 years
    @aaron done, I am hunting for this too! The second guy has his code for creating dgmls available on github..
  • R.D. Alkire
    R.D. Alkire almost 5 years
    Two notes for the near future: At the time of this edit (4/28/2019, ~1730 EDT), the EF-Core-Power-Tools that one presently gets from VS Marketplace, version 2.2.12, does not work with VS 2019, at least not for generating the diagram. Instead use version 2.2.59 (or above I assume) from Open VSIX gallery; the VSIX Gallery - nightly builds is itself available as an extention. Then grab DGML Editor from the VS installer. This was more effort than I expected.