Comment générer un diagramme de classe à partir des modèles de L'EF Core?

nous construisons une application en utilisant ASP.NET MVC Core et Entity Framework Core et nous avons l'ensemble des classes dans notre application. Dans les versions précédentes de Entity Framework, nous utiliserions cette méthode pour générer un fichier edmx pour le diagramme de classe:

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

mais il semble qu'il n'y ait pas une telle caractéristique dans EF Core. Je me demande s'il y a une version équivalente pour faire ça dans Entity Framework Core.

12
demandé sur Sirwan Afifi 2016-12-04 10:10:44

3 réponses

on dirait que EF core n'a pas cette fonctionnalité actuellement, voici un comparaison des caractéristiques entre EF6 et EFCore.

1
répondu jjohnson8 2018-09-20 10:10:03

Ce mec est sur quelque chose de bon! Vous venez d'ajouter son paquet nuget EntityFrameworkCore.Diagrams1 et il crée un contrôleur (/db-diagramme/) dans votre site web qui affiche un diagramme de votre contexte. Voir son site pour plus de détails et une démo. Ce N'est que pour les projets netstandard 1.6 alias.net Core 1.0. Boo!

mise à jour: alternativement vous pouvez utiliser ceci pour .Net Core 2.0 / EF Core 2.0 pour créer .Fichiers Dgml des classes. Il est un peu buggé. L'installer utiliser Visual Studio marketplace ou autre.

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

cette option permet d'ajouter une méthode d'extension pour créer un DGML à partir de votre fichier dbcontext. J'ai pris cela et j'ai créé ce controller où la page d'index génère et puis vous sert le fichier dgml quand vous allez à mysite.com/dgml. La même idée que celle ci-dessus. gist ici

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;
        }
    }
}
0
répondu redwards510 2017-10-12 17:29:12

pourquoi ne pas utiliser Visual Studio Class Designer à la place? Vous devez l'ajouter à votre espace de travail avec L'installateur Visual Studio. Sur L'installateur Visual Studio 2017, vous devez l'ajouter à partir de la liste des composants. Voir cette article pour plus d'info.

0
répondu Paulo Enmanuel 2018-09-20 09:26:39