Jak najpierw stworzyć wizualny model kodu EntityFramework

Jeśli spojrzysz tutaj zauważysz, że ten facet pokazuje diagramy modelu encji, chciałbym wiedzieć, jak mogę utworzyć Diagram modelu encji z moich pierwszych klas kodu EntityFramework.

Po prostu staje się frustrujące, próbując pamiętać, jak wszystko łączy się ze sobą, patrząc na kod.

Author: Callum Linington, 2013-09-06

4 answers

Po zainstalowaniu elektronarzędzi Entity Framework możesz kliknąć prawym przyciskiem myszy kontekst w widoku rozwiązania, kliknąć "Entity Framework", a następnie wybrać "View Entity Data Model".

To stworzy zgrabny diagram z Twoich klas.

 51
Author: Dennis Traub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-06 19:42:53

Schemat modelu danych encji jest tylko wizualnym wyświetlaniem pliku EDMX. Aby uzyskać taki diagram z modelu Code-First należy utworzyć z niego plik EDMX:

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

Ten kod tworzy plik Model.edmx, który można otworzyć w programie Visual Studio. Wyświetli diagram modelu. Plik EDMX jest migawką bieżącego modelu kodu. Po zmianie modelu w kodzie należy utworzyć nowy plik EDMX, aby odzwierciedlić te zmiany na diagramie.

 44
Author: Slauma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-06 19:36:30

Oprócz Slauma jego odpowiedź. Jeśli chcesz mieć możliwość dostosowania układu diagramu i nie chcesz go powtarzać za każdym razem po utworzeniu, możesz skopiować węzeł diagramu z poprzedniego pliku EDMX do nowego pliku 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"));

//zaktualizowany model jest gotowy do otwarcia w Visual Studio

 4
Author: Jaap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-15 17:52:04

Aby zachować układ z poprzedniego schematu generowanego przez Elektronarzędzia EF, przeniesie to pozycje jednostek i kolory itp. które istnieją w nowym i pozostawiają wszelkie dodatki tak jak jest. W przeciwnym razie nie zobaczysz nowych elementów na diagramie.

    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);
    }
 0
Author: Ian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-26 12:35:32