c# Как вы сначала создаете визуальную модель кода EntityFramework?




visual-studio entity-framework (4)

Диаграмма модели данных сущностей - это просто визуальное отображение файла EDMX. Чтобы получить такую ​​диаграмму из модели Code-First, вы должны создать из нее файл 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);
    }
}

Этот код создает файл Model.edmx который вы можете открыть в Visual Studio. Он отобразит диаграмму модели. Файл EDMX представляет собой моментальный снимок вашей текущей модели Code-First. Когда вы меняете модель в коде, вы должны создать новый файл EDMX, чтобы отразить эти изменения на диаграмме.

Если вы посмотрите here вы заметите, что этот парень показывает диаграммы модели Entity, я хотел бы знать, как я могу создать диаграмму модели Entity из моих первых классов кода EntityFramework.

Это просто расстраивает, пытаясь вспомнить, как все соединяется, просто просматривая код.


С установленными Power Tools Framework Entity Framework вы можете щелкнуть контекст контекста в представлении решения, нажать «Entity Framework», затем выбрать «Просмотреть модель данных сущности».

Это создаст четкую диаграмму из ваших классов.


Чтобы сохранить макет из предыдущей диаграммы, созданной на основе EF Power Tools, это приведет к тому, что позиции и цвета объектов и т. Д. Существуют в новом, и оставляют любые дополнения как есть. В противном случае вы не увидите новых объектов на диаграмме.

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

В дополнение к Слауме его ответ. Если вы хотите настроить макет диаграммы и не хотите повторять это каждый раз после создания, вы можете скопировать узел Diagram из ранее EDMX-файла в новый файл 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"));

// Обновленная модель готова к открытию с помощью Visual Studio





visual-studio-2012