web-dev-qa-db-fra.com

Comment générer un diagramme de classes à partir de modèles dans EF Core?

Nous construisons une application à l'aide d'ASP.NET MVC Core et d'Entity Framework Core et nous avons tout le groupe de classes dans notre application. Dans les versions précédentes d'Entity Framework, nous utilisions cette méthode pour générer un fichier edmx pour un diagramme de classes:

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’aucune fonctionnalité de ce type ne soit proposée dans EF Core. Je me demande s’il existe une version équivalente pour cela dans Entity Framework Core.

13
Sirwan Afifi

Il semble que EF core n’ait pas cette fonctionnalité actuellement, voici une comparaison des fonctionnalités entre EF6 et EFCore .

2
jjohnson8

Ce mec est sur quelque chose de bien ! Vous venez d'ajouter son paquet de nuget EntityFrameworkCore.Diagrams1 et il crée un contrôleur (/ db-diagram /) dans votre site Web qui affiche un diagramme de votre contexte. Voir son site pour plus de détails et une démo. Ceci concerne uniquement les projets netstandard 1.6, également nommés .Net Core 1.0. Huer!

Mise à jour: vous pouvez également l'utiliser pour .Net Core 2.0/EF Core 2.0 pour créer des fichiers .Dgml à partir des classes. C'est un petit buggy. Installez-le à l'aide du marché Visual Studio ou autre. 

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

Cela permet d'ajouter une méthode d'extension pour créer un fichier DGML à partir de votre fichier dbcontext. J'ai pris cela et créé ce contrôleur où la page d'index génère, puis vous sert le fichier dgml lorsque vous allez sur 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;
        }
    }
}
1
redwards510

Pourquoi ne pas utiliser Visual Studio Class Designer à la place? Vous devez l'ajouter à votre espace de travail avec le programme d'installation de Visual Studio. Sur Visual Studio 2017 Installer, vous devez l'ajouter à partir de la liste des composants. Voir cet article pour plus d'informations.

0
Paulo Enmanuel