45

Se si guarda here si noterà che questo ragazzo sta mostrando i diagrammi del modello di entità, vorrei sapere come posso creare un diagramma del modello di entità dal mio codice EntityFramework prime classi .Come si crea un modello visivo del codice EntityFramework prima

Diventa frustrante provare a ricordare come tutto si collega solo guardando il codice.

+0

che ha una pagina non trovata ... E 'il Browser Entity Data Model, non ho idea di come ottenerlo, e ingegnere un modello dalle mie classi –

+0

Qualcosa di simile a questo [ADO.NET Entity Data Model Designer] (http://msdn.microsoft.com/en-us/library/vstudio/cc716685 (v = vs.100) .aspx)? – johnnynotsolucky

+0

Sì quella cosa –

risposta

47

Con il Entity Frameworks Power Tools installato è possibile fare clic con il pulsante destro del mouse nella vista della soluzione, fare clic su "Entity Framework", quindi selezionare "Visualizza modello dati entità".

Ciò creerà un diagramma pulito dalle vostre classi.

+0

Era esattamente quello che stavo cercando, non riuscivo a ricordare il nome! –

+0

Link non ha funzionato per VS Express edition –

+2

Purtroppo questa estensione non è più supportata in VS2015. :( – Efrain

42

Un diagramma del modello di dati di entità è solo una visualizzazione di un file EDMX. Al fine di ottenere un tale schema da un modello Codice-In primo luogo è necessario creare un file di EDMX da esso:

using System.Data.Entity.Infrastructure; // namespace for the EdmxWriter class 

using (var ctx = new MyContext()) 
{ 
    using (var writer = new XmlTextWriter(@"c:\Model.edmx", Encoding.Default)) 
    { 
     EdmxWriter.WriteEdmx(ctx, writer); 
    } 
} 

Questo codice crea un file Model.edmx che è possibile aprire in Visual Studio. Mostrerà il diagramma del modello. Il file EDMX è un'istantanea del tuo attuale modello Code-First. Quando si modifica il modello nel codice, è necessario creare un nuovo file EDMX per riflettere le modifiche nel diagramma.

+1

Semplice e pulito! I Power Tools di Entity Framework sono la mia prima scelta, ma sono dolorosi da utilizzare per progetti complessi. – StefanG

+0

Eccellente, grazie mille! – CallMeBob

+0

Non dimenticare di eseguire Visual Studio come amministratore in modo da poter creare il file .edmx – ehsan88

4

Oltre a Slauma la sua risposta. Se si vuole essere in grado di regolare il layout del diagramma e non volete rifare questo ogni volta di nuovo dopo la creazione, è possibile copiare il nodo Schema dal precedenza EDMX file nel nuovo file EDMX:

 string sPath = @"c:\Development\{0}"; 
     try 
     { 
      File.Copy(String.Format(sPath, "Model.edmx"), String.Format(sPath, "ModelTemplate.edmx")); 
      File.Delete(String.Format(sPath, "Model.edmx")); 
     } 
     catch (Exception) 
     { 

      //no worry, file not found issues 
     } 

     using (var ctx = new ShopID.Models.ShopIDDb()) 
     { 
      using (var writer = new XmlTextWriter(String.Format(sPath, "Model.edmx"), Encoding.Default)) 
      { 
       EdmxWriter.WriteEdmx(ctx, writer); 
      } 
     } 

     XmlDocument oldModel = new XmlDocument(); 
     oldModel.Load(String.Format(sPath, "ModelTemplate.edmx")); 
     XmlDocument newModel = new XmlDocument(); 
     newModel.Load(String.Format(sPath, "Model.edmx")); 

     var nsmgr = new XmlNamespaceManager(newModel.NameTable); 
     nsmgr.AddNamespace("diagram", "http://schemas.microsoft.com/ado/2009/11/edmx"); 
     XmlNode node = oldModel.SelectSingleNode("//diagram:Diagrams", nsmgr).ChildNodes[0]; 
     XmlNode newNode = newModel.SelectSingleNode("//diagram:Diagrams", nsmgr); 
     XmlNode importNode = newNode.OwnerDocument.ImportNode(node, true); 
     newModel.ImportNode(importNode, true); 
     newNode.AppendChild(importNode); 
     newModel.Save(String.Format(sPath, "Model.edmx")); 
     File.Delete(String.Format(sPath, "ModelTemplate.edmx")); 

// Il modello aggiornato è pronto per essere aperto con Visual Studio

+0

Usato per un po ' e poi ci siamo resi conto che qualsiasi entità/associazione aggiunta al modello non viene disegnata in quella aggiornata, poiché mancano i corrispondenti nodi del diagramma. Ecco cosa faccio ora: – Ian

0

Per conservare il layout da un precedente diagramma generato da EF Power Tools, questo riporterà le posizioni e i colori delle Entità che esistono nel nuovo e lasciano qualsiasi aggiunta come è. Altrimenti non vedi le nuove entità nel diagramma.

static void CopyLayout(string srcFile, string destFile) 
    { 
     var oldModel = XDocument.Load(srcFile); 
     var newModel = XDocument.Load(destFile); 

     XNamespace edmxNs = "http://schemas.microsoft.com/ado/2009/11/edmx"; 
     // find all entity shapes 
     var oldEts = oldModel.Root.Descendants(edmxNs + "EntityTypeShape").Select(ets => ets).ToList(); 
     var newEts = newModel.Root.Descendants(edmxNs + "EntityTypeShape").Select(ets => ets).ToList(); 
     // replace any matching new with old 
     foreach (var newEt in newEts) 
     { 
      var match = oldEts.SingleOrDefault(ot => ot.Attribute(@"EntityType").Value == 
                newEt.Attribute(@"EntityType").Value); 
      if (match != null) 
       newEt.ReplaceAttributes(match.Attributes()); 
     } 
     newModel.Save(destFile); 
    } 
Problemi correlati